Python 3.x OpenCV-使用开放(非闭合)的Canny轮廓线作为遮罩的边界

Python 3.x OpenCV-使用开放(非闭合)的Canny轮廓线作为遮罩的边界,python-3.x,opencv,computer-vision,image-preprocessing,image-masking,Python 3.x,Opencv,Computer Vision,Image Preprocessing,Image Masking,我道歉,如果我在错误的位置张贴。如果是这样,请告诉我。否则,我感谢您给予的任何帮助或指导 我有一个背景下的物体图像,我想预处理,只有感兴趣的区域。我已经做了一些预处理,比如裁剪和对比度增强,但现在我想将背景设置为纯色。我正在使用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)
我在下面看到的是原始图像:


一个正确的方向或类似的例子就足够了。谢谢

您想正确制作不同颜色的线条顶部和底部吗?或者我误解了?如果你只有一条线,你可以简单地通过将种子点设置为“y_max”的某个位置来移动较低的区域。但是在左下角有一个小人工制品,对吗?找到等高线可以得到该工件的中心,然后你也可以填充该区域。但是,你一开始有没有尝试过比精明更为有效的方法?您的原始图像可能只需设置阈值即可获得所需的遮罩。@YunusTemurlenk,是的,这是正确的@除了精明,我还没有尝试过任何方法。我对python和openCV还不熟悉,所以如果还有什么我可以尝试的,请告诉我!我确实尝试过泛洪填充,但由于某些原因,调整种子点并没有产生一致的结果。我设法做到这一点,在白线的边缘手动绘制一个边框,然后使用fillPoly在其中着色。在canny之后,你可以得到那条线的坐标。然后,对于每个坐标点列,检查所有列,并根据参考线点更改像素值。比如:它们是低于还是高于