Python OpenCV:使用findContours仅获取二进制图像中的黑色轮廓

Python OpenCV:使用findContours仅获取二进制图像中的黑色轮廓,python,image,opencv,image-processing,contour,Python,Image,Opencv,Image Processing,Contour,我是OpenCV的新手,所以请耐心等待 目前,我在二值图像中得到了白色和黑色物体的轮廓。但我只想要黑色轮廓(因此值为0)。是否有某种设置可以调整以获得此结果?或者我可以过滤它们吗 另外:cv.findContours()确实返回轮廓和层次结构。层次结构用于什么 最后:等高线似乎由多个坐标的数组组成。它们是什么意思?cv2.findContours会在您的图像中找到所有轮廓。有些是内部轮廓,有些是外部轮廓,有些嵌套在其他轮廓内 因此,该方法返回多个坐标。 层次是一个向量,包含有关提取的这些不同级别

我是OpenCV的新手,所以请耐心等待

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

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


最后:等高线似乎由多个坐标的数组组成。它们是什么意思?

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

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

但是,可以设置一个基于层次过滤轮廓

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


我想补充一点,你可以做的一件明智的事情是在获得轮廓之前过滤图像,这样你就可以根据你选择的颜色或颜色范围(请参见
cv2.inRange

据我所知,我可以用cv2.inRange创建一个面具?这个掩码(至少在我在文档中找到的示例中)看起来是二进制的。我的图像一开始是二进制的。该遮罩能帮我做什么?你创建遮罩并将其传递到
cv2.findContours
中,就像你处理图像一样,它会在该遮罩中找到轮廓。我不知道这是否适合您的用例。这是解决问题的一种方法。如果不适合您的应用程序,您也可以先提取轮廓,然后过滤。因此,当我将遮罩传递到cv2.FindTours上时,它只会找到(即)黑色轮廓,而不是白色轮廓?遮罩基本上是原始图像,没有您剪切的所有颜色。当你经过面具时,它会找到它能找到的所有轮廓,但在面具里面,不是图像。Yeees,这是我已经得到的,但它不能回答我的问题。当我有一个圆并精确地遮罩该圆(而不是孔)并将遮罩传递到findContours()上时,它不会返回孔的轮廓,对吗?