1.漫水填充的定义: 漫水填充法是一种用特定的颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或只处理掩码指定的像素点,操作的结果总是某个连续的区域。
2.漫水填充的思想: 所谓漫水填充,简单来说,自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色,是个非常有用的功能,经常用来标记或者分离图像的一部分进行处理或分析.漫水填充也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或者只处理掩码指定的像素点。
3.fooldFill():
floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)
通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法)
下面用两个例子说明:
cv.FLOODFILL_FIXED_RANGE: 指定颜色填充
def fill_color_demo(image):
copyIma = image.copy()
h, w = image.shape[:2]
print(h, w)
mask = np.zeros([h+2, w+2], np.uint8)
cv2.floodFill(copyIma, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)
cv2.imshow("fill_color", copyIma)
src = cv2.imread("C:/Users/myJupyter/pic/test.png")
cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image", src)
fill_color_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2 as cv
def fill_binary():
image = np.zeros([300, 300, 3], np.uint8)
image[100:300, 100:300, : ] = 255
cv.imshow("fill_binary", image)
mask = np.ones([302, 302, 1], np.uint8)#注意边缘加2
mask[101:301, 101:301] = 0
cv.floodFill(image, mask, (200, 200), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)#红色
cv.imshow("filled binary", image)
fill_binary()
cv.waitKey(0)
cv.destroyAllWindows()
说明:
需要注意的是,漫水填充不会填充掩膜mask的非零像素区域(python中取整,也就是0~0.9都是0)。例如,一个边缘检测算子的输出可以用来作为掩膜,以防止填充到边缘。同样的,也可以在多次的函数调用中使用同一个掩膜,以保证填充的区域不会重叠。另外需要注意的是,掩膜mask会比需填充的图像大,所以 mask 中与输入图像(x,y)像素点相对应的点的坐标为(x+1,y+1)。
参考链接:1.https://blog.csdn.net/poem_qianmo/article/details/28261997
2.https://blog.csdn.net/u011321546/article/details/79571221
3.https://blog.csdn.net/weixin_42508025/article/details/84029054