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, 80), (0, 100, 255), (100, 100, 50), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("填充", copyImage)

src = cv.imread("C://1.jpg")
cv.imshow("原来", src)
fill_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:


说明如下:

floodFill函数:漫水填充算法:我觉得叫颜色替换好一些

官方定义为:floodFill(InputOutputArray image, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 ) 

不知道为啥,python中调用这个函数,Rect* rect=0这个参数没有,剩下7个参数 

通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法)

视频讲解如下:

参数5.填充颜色的低值就是:参数3 减去 参数5

参数6.填充颜色的高值就是:参数3 加上 参数6

即是这两个数值之间的色素替换为参数4的颜色

疑问就是:参数3,5,6的个数都不一样,不太懂怎么减去的? 以后知道了再补充!

7.填充的方法

  彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充

还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充

函数操作如下:

#指定位置填充
def fill2_image():
    image = np.zeros([200, 200, 3], np.uint8)
    #image[100:300, 100:300, :] = 255
    cv.imshow("原图", 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.imshow("填充2", image)

调用函数输出如下:



泛洪填充Flood Fill)是一种图像处理算法,用于将图像中的一个区域或连通分量用指定的颜色进行填充。在Python OpenCV中,可以使用cv2.floodFill()函数实现泛洪填充。 泛洪填充函数的原型如下: cv.floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]]) -> retval, image, mask, rect 其中,参数解释如下: - image:输入图像,可以是灰度图像或彩色图像。 - mask:掩膜图像,用于指定填充的区域。图像大小必须比输入图像的大小大2。 - seedPoint:起始点,填充的起始位置。 - newVal:新的像素值,填充的颜色。 - loDiff和upDiff:下界和上界,用于指定填充的范围。如果不指定,默认为(0,0,0)和(0,0,0),表示填充指定像素值的区域。 - flags:填充算法的标志,可以是cv.FLOODFILL_FIXED_RANGE或cv.FLOODFILL_MASK_ONLY。 在泛洪填充中,可以根据需要进行彩色图像填充或二值图像填充。为了演示不同的填充方式,我分别提供了两个例子: 1. 彩色图像填充: ```python import cv2 as cv import numpy as np def fill_color_demo(image): copyImg = image.copy() h, w = image.shape[:2] mask = np.zeros([h+2, w+2], np.uint8) cv.floodFill(copyImg, mask, (220, 250), (0, 255, 255), (100, 100, 100), (50, 50 ,50), cv.FLOODFILL_FIXED_RANGE) cv.imshow("fill_color_demo", copyImg) src = cv.imread('E:/imageload/baboon.jpg') cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE) cv.imshow('input_image', src) fill_color_demo(src) cv.waitKey(0) cv.destroyAllWindows() ``` 2. 二值图像填充: ```python import cv2 as cv import numpy as np def fill_binary(): image = np.zeros([400, 400, 3], np.uint8) image[100:300, 100:300] = 255 mask = np.ones([402, 402], np.uint8) mask[101:301, 101:301] = 0 cv.floodFill(image, mask, (200,200), (255 , 0, 0), cv.FLOODFILL_MASK_ONLY) cv.imshow("filled_binary", image) fill_binary() cv.waitKey(0) cv.destroyAllWindows() ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值