具有多个种子的 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() 使用所需的填充颜色绘制输入图像(您必须使用蒙版的子图像! 删除第一行和最后一行和列)。请注意,如果将 loDiff
或 upDiff
设置为不同于默认值零的值,则根据处理种子点的顺序,您的填充可能会产生不同的结果。
也看看 this。
是否有 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() 使用所需的填充颜色绘制输入图像(您必须使用蒙版的子图像! 删除第一行和最后一行和列)。请注意,如果将 loDiff
或 upDiff
设置为不同于默认值零的值,则根据处理种子点的顺序,您的填充可能会产生不同的结果。
也看看 this。