【问题标题】:OpenCV: Get only black contours in a binary image with findContoursOpenCV:使用 findContours 仅获取二进制图像中的黑色轮廓
【发布时间】:2019-09-21 01:08:04
【问题描述】:

我是 OpenCV 新手,请多多包涵。

目前,我在二值图像中同时获得了白色和黑色的轮廓。我只想要黑色轮廓(所以值为0)。我可以调整某种设置以获得此结果吗?或者我可以过滤它们吗?

另外:cv.findContours() 确实返回轮廓和层次结构。层次结构有什么用?

最后一点:轮廓似乎由具有多个坐标的数组组成。它们是什么意思?

【问题讨论】:

    标签: python image opencv image-processing contour


    【解决方案1】:

    cv2.findContours 查找图像中的所有轮廓。有些是内部的,有些是外部的,有些嵌套在其他轮廓内。

    因此,该方法返回多个坐标。 层次结构是一个向量,其中包含有关提取的这些不同级别的轮廓(外部、嵌套、内部等)的信息。

    但是,您可以设置 retrievalMode 以根据层次结构过滤轮廓。

    在任何情况下,它们都不包含有关颜色的信息,因此您需要以某种方式过滤它们。

    我可能会补充一点,您可以做的一件明智的事情是在获取轮廓之前过滤图像,因此您只能根据您选择的颜色或颜色范围在您创建的蒙版中找到轮廓(请参阅cv2.inRange

    【讨论】:

    • 据我了解,我可以用 cv2.inRange 创建一个蒙版吗?这个掩码(至少在我在文档中找到的示例中)似乎是二进制的。我的图像一开始是二进制的。那个面具能帮我做什么?
    • 您创建蒙版并将其传递给cv2.findContours,就像您对图像所做的那样,它会在该蒙版中找到轮廓。我不知道这是否适合您的用例。这是解决问题的一种方法。如果它不适合您的应用程序,您也可以先提取轮廓,然后过滤它们。
    • 所以当我将蒙版传递给 cv2.findCotours 时,它只找到(即)黑色轮廓而不是白色轮廓?
    • 蒙版基本上是没有剪掉所有颜色的原始图像。当你通过遮罩时,它会找到它可以找到的所有轮廓,但在遮罩内,而不是图像。
    • 是的,这就是我已经得到的,但它没有回答我的问题。当我有一个圆并完全遮住那个圆(不是洞)并将那个遮罩传递给 findContours() 时,它不会返回洞的轮廓,对吧?
    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2017-11-06
    • 2019-02-12
    相关资源
    最近更新 更多