我正在尝试使用 python OpenCV 查找并分离边缘检测图像中的所有边缘。边缘可以是轮廓的形式,但不是必须的。我只想将所有连接的边缘像素组合在一起。所以从技术上讲,该算法在程序上可能听起来像这样:
- 对于每个边缘像素,找到一个相邻的(连接的)边缘像素并将其添加到图像的当前细分中,直到找不到一个为止。
- 然后移动到下一个未检查的边缘像素并开始新的细分并再次执行 1)。
我已经看过了,cv.findContours
但结果并不令人满意,可能是因为它是用于轮廓(封闭边缘)而不是自由端的。结果如下:
检测到原始边缘:
轮廓处理后:
我预计这五个边缘将各自分组到其自己的图像细分中,但显然 cv2.findContours 函数将边缘中的 2 个甚至进一步细分为我不想要的细分。
这是我用来保存这两张图片的代码:
def contourForming(imgData):
cv2.imshow('Edge', imgData)
cv2.imwrite('EdgeOriginal.png', imgData)
contours = cv2.findContours(imgData, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('Contours', imgData)
cv2.imwrite('AfterFindContour.png', imgData)
cv2.waitKey(0)
pass
但是,我的实施有一些限制。我必须使用 Python 2.7 和 OpenCV2。除了这些,我不能使用任何其他版本或语言。我这样说是因为我知道 OpenCV 2 有一个使用 C++ 的 connectedComponent 函数。我本可以使用它,但问题是,由于某些限制,我无法使用它。
那么,知道我应该如何解决这个问题吗?