首先看看floodFill()的算法原型

def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)
第一个参数image为原图像
第二个参数mask为掩模
第三个参数SeedPoint为随机初始种子
第四个参数为低值
第五个参数为高值
第六个参数为选项,即填充方法,FLOODFILL_FIXED_RANGE 指定填充的颜色
FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为0不填充

分别看看这两个函数的例子:

def fill_color_demo(image):
    copyImage = image.copy()
    h, w = copyImage.shape[:2]
    mask = np.zeros([h+2, w+2], np.uint8) // 这里必须为 h+2,w+2
    cv.floodFill(copyImage, mask, (20, 20), (0, 125, 125), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo", copyImage)

这个意思就是选取一个随机种子(20,20),然后在低值和高值范围内,就把颜色改为(0,125,125)。
我们看运行结果:
在这里插入图片描述

FLOODFILL_MASK_ONLY另外一种模式

mask指定的位置为0时填充,非0则不填充。

def fill_binary():
    image = np.zeros([400, 400, 3], np.uint8)
    image[100:200, 100:200, :] = 255
    #cv.imshow("fill_binary", image)
    mask = np.ones([402, 402, 1], np.uint8)
    mask[101:201, 101:201] = 0
    cv.floodFill(image, mask, (105, 105), (100, 23, 200), cv.FLOODFILL_MASK_ONLY)
    cv.imshow("fill_binary1", image)

我们自己生成一个图像,然后在里面划分一块分成白色,然后我们对这块设置掩摸为0,然后就会把这块渲染成自己定义的像素(100, 23, 200)。

结果:

在这里插入图片描述
里面具体的细节,以后在了解。

参考
视频链接