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

Pyt*_*n1c 10 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)
Run Code Online (Sandbox Code Playgroud)

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

Sun*_*eef 13

为此,您应该查看本教程,了解如何使用hierarchy该方法返回的对象findContours.

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

regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
Run Code Online (Sandbox Code Playgroud)

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

  • 你不想使用 cv2.RETR_EXTERNAL 因为他想删除另一个轮廓内的所有轮廓吗? (8认同)