OpenCV之漫水填充算法(Python实现)
首先看看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)。
结果:
里面具体的细节,以后在了解。
参考
视频链接