首先看看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)。
我们看运行结果:
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)。
结果:
参考
视频链接