具有多个种子的OpenCV FloodFill

时间:2015-02-06 11:23:29

标签: python c++ opencv flood-fill simplecv

是否有python / openCV的floodFill函数,它接受种子列表并开始更改其邻居的颜色?我知道simplecv就像SimpleCV floodFill那样的函数。 OpenCV说它有两个floodFill函数,当它使用一个掩码而另一个没有,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]]

1 个答案:

答案 0 :(得分:2)

如果仔细观察文档,那就是掩码的目的之一。您可以使用不同的种子每次多次调用函数(第2版),并且最后掩码将包含已填充的区域。如果新种子属于已经填充的区域,则您的函数调用将立即返回。

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

另请查看this