一、前言
泛洪填充算法也叫漫水填充算法。在网上查阅了很多的关于泛洪填充的案例但是一直都表示理解不了参数的具体作用,在自己的研究中才慢慢有所了解。
二、泛洪填充
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread("cat.png")
copyImg = image.copy()
h, w = image.shape[:2]
mask = np.zeros([h+2, w+2],np.uint8)
cv2.floodFill(copyImg,mask,(360,200),(100,100,0),(100,50,100),(10,10,10),cv2.FLOODFILL_FIXED_RANGE)
img = cv2.cvtColor(copyImg, cv2.COLOR_BGR2RGB)
cv2.imshow("fill_color_demo", copyImg)
plt.figure('image')
plt.imshow(img)
plt.show()
核心的代码是:
cv2.floodFill(copyImg,mask,(360,200),(100,100,0),(100,50,100),(10,10,10),cv2.FLOODFILL_FIXED_RANGE)
三、参数说明
floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]])
image参数表示输入/输出1或3通道,8位或浮点图像。
mask参数表示掩码,该掩码是单通道8位图像,比image的高度多2个像素,宽度多2个像素。填充时不能穿过输入掩码中的非零像素。
seedPoint参数表示泛洪算法(漫水填充算法)的起始点,即图像像素坐标。
newVal参数表示在重绘区域像素的新值。
loDiff参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之负差的最大值。
upDiff参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之正差的最大值。
在floodfill函数中,第二参数是掩膜,掩膜为1的区域被遮盖住了,不能用于泛洪。第二个参数是起始坐标,注意先列后行。第三个坐标是目标颜色,第四个坐标是泛洪的下界,第五个坐标是泛洪的上界(就是能够比第二个参数的像素值大多少),第六个参数是固定的。
参考:https://www.cnblogs.com/loubin/p/12292189.html