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

标签 python opencv contour

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/

相关文章:

python - uWSGI AJAX,读取请求

if 语句中无法识别 Python 变量

c++ - 使用 lerp 在两个图像之间执行线性插值

python - opencv python图像抖动

python - 为什么使用 cv2.findContours 将 Boudary 检测为轮廓?

Matlab等高线图平滑颜色

python - 输入密码时如何将其转换为星号?

python - 当我在内部使用两个循环时,如何提高算法的效率?

c++ - 段错误,找不到我做错的地方

openCv 查找边/轮廓的坐标