话不多说,上代码,看结果。
import cv2 # 导入库
img = cv2.imread('46.jpg')
cv2.imshow('img', img)
mask = None
seed_pt = (239, 255) # 种子点坐标
Color = (255, 255, 255) # 重绘颜色
nColorDiff = (10, 10, 10) # 颜色负差最大值
pColorDiff = (10, 10, 10) # 颜色正差最大值
connectivity = 8 # 连通性标志
'''
cv2.floodFill(image, mask, seedPoint, newVal, loDiff, upDiff, flags)
# 从一个点开始遍历附近像素点, 填充新的颜色, 直到封闭区域内所有像素点都被填充成新颜色为止
# image: 输入/输出单通道或3通道8位或浮点图像
# mask: 操作掩码, 应为8位单通道且长和宽比输入图像大两个像素点的图像,
# 漫水填充不会填充mask的非零像素区域(可以用边缘检测算子输出来防止填充到边界),
# mask中与输入图像(x,y)像素点相对应的点坐标为(x+1,y+1)
# seedPoint: 种子点, 漫水填充算法起始点
# newVal: 像素点被染颜色的值, 即在重绘区域像素的新值
# rect: Rect*类型,默认值0, 可选参数, 用于设置floodFill函数将要重绘区域的最小边界矩形区域
# loDiff: 默认值Scalar(), 表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度
# 或颜色之负差(lower brightness/color difference)最大值
# upDiff: 默认值Scalar(),表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度
# 或颜色之正差(lower brightness/color difference)最大值
# flags: 操作标志符, 包含三部分:
# 低八位(0~7位): 用于控制算法的连通性, 可取4(默认)或8
# 高八位(16~32位): 可以为0或者如下两种标志符的组合:
# FLOODFILL_FIXED_RANGE: 设置此标志符会考虑当前像素与种子像素之间的差, 否则就考虑当前像素与其相邻像素的差
# FLOODFILL_MASK_ONLY: 设置此标志符, 函数不会去填充改变原始图像(也就是忽略第三个参数newVal), 而是去填充掩码图像mask
# 中间八位(8~15位): 用于指定填充掩码图像的值, 但是如果中间八位为0则掩码用1来填充
'''
cv2.floodFill(img, mask, seed_pt, Color, nColorDiff, pColorDiff, connectivity)
cv2.imshow('result', img)
'''
cv2.waitKey(delay)
# delay为正数时,延时delay毫秒结束
# 想要用按下某个键时退出可用以下方法:
# if(cv2.waitKey(0) == ord('q')):
exit(0)
#别的方法也行,不唯一
'''
if cv2.waitKey(0) & 0xFF == 27:
exit(0)
'''
cv2.destroyWindow(winname)
#结束窗口,winname为窗口名
cv2.destroyAllWindows()
#结束所有窗口
'''
cv2.destroyAllWindows()
import cv2 # 导入库
import numpy as np
img = cv2.imread('46.jpg')
w, h = img.shape[1], img.shape[0]
mask = np.zeros((h+2, w+2), np.uint8)
cv2.rectangle(mask, (10, 10), (111, 111), (255, 255, 255), 1, cv2.LINE_AA)
cv2.imshow('mask', mask)
seed_pt = (70, 143) # 种子点坐标
Color = (255, 255, 255) # 重绘颜色
nColorDiff = (10, 10, 10) # 颜色负差最大值
pColorDiff = (10, 10, 10) # 颜色正差最大值
connectivity = 4 # 连通性标志
'''
cv2.floodFill(image, mask, seedPoint, newVal, loDiff, upDiff, flags)
# image: 输入/输出单通道或3通道8位或浮点图像
# mask: 操作掩码, 应为8位单通道且长和宽比输入图像大两个像素点的图像,
# 漫水填充不会填充mask的非零像素区域(可以用边缘检测算子输出来防止填充到边界),
# mask中与输入图像(x,y)像素点相对应的点坐标为(x+1,y+1)
# seedPoint: 种子点, 漫水填充算法起始点
# newVal: 像素点被染颜色的值, 即在重绘区域像素的新值
# rect: Rect*类型,默认值0, 可选参数, 用于设置floodFill函数将要重绘区域的最小边界矩形区域
# loDiff: 默认值Scalar(), 表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度
# 或颜色之负差(lower brightness/color difference)最大值
# upDiff: 默认值Scalar(),表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度
# 或颜色之正差(lower brightness/color difference)最大值
# flags: 操作标志符, 包含三部分:
# 低八位(0~7位): 用于控制算法的连通性, 可取4(默认)或8
# 高八位(16~32位): 可以为0或者如下两种标志符的组合:
# FLOODFILL_FIXED_RANGE: 设置此标志符会考虑当前像素与种子像素之间的差, 否则就考虑当前像素与其相邻像素的差
# FLOODFILL_MASK_ONLY: 设置此标志符, 函数不会去填充改变原始图像(也就是忽略第三个参数newVal), 而是去填充掩码图像mask
# 中间八位(8~15位): 用于指定填充掩码图像的值, 但是如果中间八位为0则掩码用1来填充
'''
cv2.floodFill(img, mask, seed_pt, Color, nColorDiff, pColorDiff, connectivity)
cv2.imshow('result', img)
'''
cv2.waitKey(delay)
# delay为正数时,延时delay毫秒结束
# 想要用按下某个键时退出可用以下方法:
# if(cv2.waitKey(0) == ord('q')):
exit(0)
#别的方法也行,不唯一
'''
if cv2.waitKey(0) & 0xFF == 27:
exit(0)
'''
cv2.destroyWindow(winname)
#结束窗口,winname为窗口名
cv2.destroyAllWindows()
#结束所有窗口
'''
cv2.destroyAllWindows()