OpenCV in Python 提供如下代码:
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 中删除它们?
最佳答案
为此,您应该看看 this tutorial关于如何使用 findContours
方法返回的 hierarchy
对象。
要点是您应该使用cv2.RETR_TREE
而不是cv2.RETR_LIST
来获取集群之间的父/子关系:
regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
然后您可以通过检查 hierarchy[0,i,3]
是否等于 -1 来检查索引为 i
的轮廓是否在另一个轮廓内。如果它不同于 -1,那么你的轮廓在另一个轮廓内。
关于python - 如何在 Python OpenCV 中删除轮廓内部的轮廓?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37479338/