052-OpenCV漫水填充算法

话不多说,上代码,看结果。

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()

结果如下图。
在这里插入图片描述
就先这样,遇到别的再补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值