使用OpenCV查找连接的组件

时间:2015-11-23 04:08:24

标签: python-2.7 opencv edge-detection connected-components

我试图使用python OpenCV找到并分离边缘检测图像中的所有边缘。边缘可以是轮廓的形式,但他们不必这样做。我只想将所有连接的边缘像素组合在一起。因此从技术上讲,算法可能在程序上听起来像这样:

  1. 对于每个边缘像素,找到相邻(连接)的边缘像素并将其添加到图像的当前细分,直到您不能再找到它。
  2. 然后转到下一个未经检查的边缘像素并开始新的细分并再次执行1)。
  3. 我查看了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函数。我本可以使用它,但问题是,由于某些限制我无法使用它。

    那么,任何想法我应该如何处理这个问题?

0 个答案:

没有答案