OpenCV泛洪填充多个种子

OpenCV FloodFill with multiple seeds

本文关键字:种子 填充 泛洪 OpenCV      更新时间:2023-10-16

python/openCV是否有一个floodFill函数,它会获取种子列表并开始更改其邻居的颜色?我知道simplecv是一个类似simplecv floodFill的函数。OpenCV说,当它使用掩码时,它有两个floodFill函数,另一个不使用掩码,文档中,如果没有掩码和种子列表,我将无法使用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的用途之一。您可以多次调用函数(第二个版本),每次都使用不同的种子,并且在末尾掩码将包含已填充的区域。如果一个新种子属于一个已经被淹没的区域,那么函数调用将立即返回。

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

看看这个。