在上图中,我只需要以下轮廓: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,因为这四个轮廓内部仅包含空白区域?
答案 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