Python 轮廓特征筛选:解析 `hierarchy` 返回值
以下是一个简单的轮廓特征筛选的 Python 代码示例:
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area > 100:
cv2.drawContours(img, contours, i, (0, 0, 255), 2)
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,findContours 函数返回两个值:轮廓列表和轮廓层级。轮廓层级描述了轮廓之间的关系,它是一个包含四个元素的列表,每个元素都是一个整数,它们的含义是:
hierarchy[i][0]:下一个轮廓的索引,如果没有下一个轮廓,则为-1。hierarchy[i][1]:上一个轮廓的索引,如果没有上一个轮廓,则为-1。hierarchy[i][2]:子轮廓的索引,如果没有子轮廓,则为-1。hierarchy[i][3]:父轮廓的索引,如果没有父轮廓,则为-1。
因此,可以使用这些信息来遍历轮廓树并筛选出需要的轮廓。在上面的示例中,我们使用cv2.RETR_TREE 模式来获取完整的轮廓层级信息,并使用cv2.CHAIN_APPROX_SIMPLE 方法来压缩轮廓点。然后,我们遍历每个轮廓,计算其面积并将其绘制在原始图像上,如果面积大于100。
如果需要更复杂的轮廓特征筛选,可以使用更高级的算法,如形状匹配或轮廓拟合。
原文地址: https://www.cveoy.top/t/topic/mQgx 著作权归作者所有。请勿转载和采集!