以下是一个简单的轮廓特征筛选的 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。

如果需要更复杂的轮廓特征筛选,可以使用更高级的算法,如形状匹配或轮廓拟合。

Python 轮廓特征筛选:解析 `hierarchy` 返回值

原文地址: https://www.cveoy.top/t/topic/mQgx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录