首页 > 解决方案 > OpenCV - 使用开放(非封闭)Canny 轮廓线作为遮罩的边界

问题描述

如果我在错误的位置发帖,我深表歉意。请让我知道是否是这种情况。否则,我感谢提供的任何帮助或指导。

我有一个背景下的物体图像,我想对其进行预处理以仅具有感兴趣的区域。我已经完成了一些预处理,例如裁剪和对比度增强,但现在我想将背景设置为纯色。我正在使用 canny 生成对象边缘和背景之间的轮廓线,如下所示:

示例图像

现在,我想知道是否可以以某种方式使用中间的那条长线作为遮罩的边界,以覆盖所述线下方的所有内容。我在这个网站和其他地方看到的每个例子总是使用封闭几何形状(如正方形、圆形等)的 Canny 轮廓。

我试图抓住面积最大的轮廓(希望它能捕获上半部分或下半部分),如下所示:

    cnts = cv2.findContours(img_edge_top.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        cnts = imutils.grab_contours(cnts)
        cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10]

        contour = max(cnts, key = cv2.contourArea)
        cv2.drawContours(img_blur_top, [contour], -1, (0, 255, 0), 3)
        cv2.imshow("contour", img_edge_top)
        cv2.waitKey(0)

我在下面得到的是原始图像:

在此处输入图像描述

指向正确方向或类似示例的点就足够了。谢谢

标签: python-3.xopencvcomputer-visionimage-preprocessingimage-masking

解决方案


推荐阅读