如何在OpenCV python中忽略内部黑色轮廓?

时间:2018-11-13 06:53:10

标签: python image-processing computer-vision cv2 opencv-contour

在上图中,我只需要以下轮廓:8、7、0、2、4。

其中每个其他轮廓为黑色的空盒子。有没有一种方法可以使用cv2.RETR_TREE自动提取此类轮廓?

cv2.RETR_EXTERNAL将忽略我实际需要的2和4

       >>heirarchy

       >>array([[[ 7, -1,  1, -1],

        [-1, -1,  2,  0],

        [-1, -1,  3,  1],

        [-1, -1,  4,  2],

        [-1, -1,  5,  3],

        [ 6, -1, -1,  4],

        [-1,  5, -1,  4],

        [ 8,  0, -1, -1],

        [-1,  7, -1, -1]]])

如何从上述层次结构中仅提取外部轮廓,而不排除2和4并忽略1、3、5、6,因为这四个轮廓内部仅包含空白区域?

2 个答案:

答案 0 :(得分:0)

您可以使用cv2.contourArea(contour)来获取轮廓的面积,然后设置最小面积条件来消除轮廓过小的轮廓。

答案 1 :(得分:0)

如果您可以自由使用cv2.RETR_TREE以外的任何其他方法,则可以使用cv2.RETR_CCOMP,它仅将轮廓划分为两个层次层次结构,即外部和内部。您只能选择父索引(索引3的值)为-1的轮廓。 “ -1”表示轮廓没有任何父级。您只会得到以下轮廓:8、7、0、2、4。

参考:https://docs.opencv.org/3.4/d9/d8b/tutorial_py_contours_hierarchy.html