opencv的findContours中,cv.RETR_FLOODFILL是做什么的?

mlu*_*rig 6 python opencv image-processing

在 opencv文档中它说:

如果模式等于 RETR_CCOMP 或 RETR_FLOODFILL,则输入也可以是标签的 32 位整数图像 (CV_32SC1)。

将转换后的图像发送到函数后,我得到了 180k 轮廓,如果我绘制它们,就会导致下面的黑色混乱。那么RETR_FLOODFILL它有什么作用以及如何正确使用它呢?

img = cv2.imread("lena.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, contours, _ = cv2.findContours(image=np.array(img, dtype=np.int32),  mode=cv2.RETR_FLOODFILL, method=cv2.CHAIN_APPROX_SIMPLE)
len(contours)
Out[7]: 183295
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

MH3*_*304 3

我认为它可以完成任何功能cv2.floodFill。查找所有符合以下条件的像素:

1-相互连接

2-强度值彼此接近

并将它们视为一个连接的组件。例如,在您的示例图像中,有 183295 个像素组粘在一起并且具有接近的强度。