具有多个种子的 OpenCV FloodFill

OpenCV FloodFill with multiple seeds

是否有 python/openCV 的 floodFill 函数获取种子列表并开始改变其邻居的颜色?我知道 simplecv 是一个类似 SimpleCV floodFill. OpenCV says it has two floodFill functions when that uses a mask and another one that doesn't, documentation 的函数,我无法在没有掩码和种子列表的情况下使用 opencv floodfill 函数。有帮助吗?

这是我目前正在尝试做的事情:

A=array([[0,1,1,0],[0,0,0,0],[1,1,1,1],[1,1,1,1]],np.uint8)
mask = np.ones((A.shape[0]+2,A.shape[0]+2),np.uint8)
mask[1:-1,1:-1] = np.zeros((A.shape))
cv.floodFill(A, mask, (3,0), 0,0,0,  flags=4|cv.FLOODFILL_MASK_ONLY)
print mask

返回的掩码:

[[1 1 1 1 1 1]
 [1 1 0 0 1 1]
 [1 1 1 1 1 1]
 [1 0 0 0 0 1]
 [1 0 0 0 0 1]
 [1 1 1 1 1 1]]

预期掩码:

[[1 1 1 1 1 1]
 [1 0 0 0 0 1]
 [1 0 0 0 0 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]]

原图:

[[0 1 1 0]
 [0 0 0 0]
 [1 1 1 1]
 [1 1 1 1]]

如果您仔细查看文档,这就是 mask 的目的之一。您可以每次使用不同的种子多次调用该函数(第二版),最后掩码将包含已被填充的区域。如果新种子属于已经被淹没的区域,您的函数调用将立即 return。

使用 FLOODFILL_MASK_ONLY 标志,然后使用此蒙版在最后使用 setTo() 使用所需的填充颜色绘制输入图像(您必须使用蒙版的子图像! 删除第一行和最后一行和列)。请注意,如果将 loDiffupDiff 设置为不同于默认值零的值,则根据处理种子点的顺序,您的填充可能会产生不同的结果。

也看看 this