如何在Python OpenCV中删除轮廓内的轮廓?

时间:2016-05-27 09:06:45

标签: python opencv contour

Python中的OpenCV提供以下代码:

regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)


for region in regions:
    x, y, w, h = cv2.boundingRect(region)

    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)

这给出了轮廓内的一些轮廓。如何在Python中删除它们?

2 个答案:

答案 0 :(得分:11)

为此,您应该查看this tutorial有关如何使用方法hierarchy返回的findContours对象的信息。

重点是您应该使用cv2.RETR_TREE代替cv2.RETR_LIST来获得群集之间的父/子关系:

regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

然后,您可以通过检查i是否等于-1来检查索引hierarchy[0,i,3]的轮廓是否在另一个中。如果它与-1不同,则轮廓在另一个内部。

答案 1 :(得分:0)

img_output, contours, hierarchy = cv2.findContours(blank_image_firstImage, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

这将删除子轮廓