python实现opencv学习九:floodFill填充函数

指定颜色替换

代码:

# -*- coding=GBK -*-
import cv2 as cv
import numpy as np


# 指定颜色替换
def fill_image(image):
    copyImage = image.copy()  # 复制原图像
    h, w = image.shape[:2]  # 读取图像的宽和高
    mask = np.zeros([h + 2, w + 2], np.uint8)  # 新建图像矩阵  +2是官方函数要求
    cv.floodFill(copyImage, mask, (0, 10), (255, 250, 250), (30, 30, 30), (150, 150, 150), cv.FLOODFILL_FIXED_RANGE)
    cv.floodFill(copyImage, mask, (530, 280), (255, 250, 250), (40, 40, 40), (70, 70, 70), cv.FLOODFILL_FIXED_RANGE)
    cv.floodFill(copyImage, mask, (530, 60), (255, 250, 250), (150, 150, 150), (75, 75, 75), cv.FLOODFILL_FIXED_RANGE)
    # floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)
    # Image:输入图像,可以是一通道或者是三通道。
    # mask:该版本特有的掩膜。 单通道,8位,在长宽上都比原图像image多2个像素点。另外,当flag为FLOORFILL_MAK_ONLY时,只会填充mask中数值为0的区域。
    # seedPoint:漫水填充的种子点,即起始点。
    # newVal:被填充的像素点新的像素值
    # loDiff:表示当前的观察点像素值与其相邻区域像素值或待加入该区域的像素之间的差的最大值。
    # upDiff:表示当前的观察点像素值与其相邻区域像素值或待加入该区域的像素之间的和的最大值。
    # flag:
    #      当为CV_FLOODFILL_FIXED_RANGE 时,待处理的像素点与种子点作比较,在范围之内,则填充此像素 。(改变图像)
    #      CV_FLOODFILL_MASK_ONLY 此位设置填充的对象,若设置此位,则mask不能为空,此时,函数不填充原始图像img,而是填充掩码图像.
    cv.imshow("fill", copyImage)

src = cv.imread("fengling.jpg")
cv.imshow("before", src)
fill_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

结果:

备注:

seedPoint表示的是像素位置,指定位置像素替换的规则是:

src(seed.x’, seed.y’) - loDiff <= src(x, y) <= src(seed.x’, seed.y’) +upDiff

 


指定位置填充

代码:

# -*- coding=GBK -*-
import cv2 as cv
import numpy as np


#指定位置填充
def fill2_image():
    image = np.zeros([200, 200, 3], np.uint8)
    #image[100:300, 100:300, :] = 255
    cv.imshow("before", image)
    mask = np.ones([202, 202, 1], np.uint8)
    mask[100:150, 100:150] = 0
    cv.floodFill(image, mask, (100, 100), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)
    cv.namedWindow("after",0)
    cv.imshow("after", image)

fill2_image()
cv.waitKey(0)
cv.destroyAllWindows()

结果:

备注:

掩膜/MASK为单通道

FLOODFILL_MASK_ONLY 方式填充为掩膜填充,代码 floodFill() 函数的输入参数(100, 100)为种子点,(0, 0, 255) 为填充颜色

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值