Python+OpenCV入门教程【六】ROI与泛洪填充

  ROI(region of interest),也就是感兴趣区域,如果你设置了图像了ROI,那么在使用OpenCV的函数的时候,会只对ROI区域操作,其他区域忽略。

floodFill函数详解:
在这里插入图片描述
参数:

image 【输入/输出】 1或者3通道、 8bit或者浮点图像

mask 【输入/输出】 操作掩码,必须为单通道、8bit,且比image宽2个像素、高2个像素

seedPoint 起始像素点

newVal 重绘像素区域的新的填充值(颜色)

rect 可选输出参数,返回重绘区域的最小绑定矩形

loDiff 当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大下行差异值

upDiff 当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大上行差异值

flags flags标志位是一个32bit的int类型数据,其由3部分组成: 0-7bit表示邻接性(4邻接、8邻接);8-15bit表示mask的填充颜色;16-31bit表示填充模式(详见填充模式解释)

flood fill填充模式:
FLOODFILL_FIXED_RANGE:如果设置了该值,则考虑当前像素与seed像素之间的差异,否则考虑相邻像素之间的差异(即浮动区间)

FLOODFILL_MASK_ONLY:如果设置了该值,floodFill函数不会修改image的内容(newVal被忽略),只使用flags标志中bit8-15的值填充mask。该选项仅在含mask参数的floodFill函数中有效。

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

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

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

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

import cv2 as cv
import numpy as np


# 截取图片中的指定区域或在指定区域添加某一图片
def jie_image(src1):
    src2 = src1[20:100, 500:700]  # 截取第5行到89行的第500列到630列的区域
    cv.imshow("intercept", src2)    #截取图片
    src1[105:185, 300:500] = src2  # 指定位置填充,大小要一样才能填充
    cv.imshow("composite", src1)    #合成图片


#指定颜色替换
def fill_image(image):
    copyImage = image.copy()#复制原图像
    h, w = copyImage.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("floodFill", copyImage)

# 指定位置填充
def fill_binary():
    # 创建一张400×400的黑图
    image = np.zeros([400, 400, 3], np.uint8)
    image[50:350, 50:350, :] = 255
    cv.imshow("original", image)

    # mask的大小一定比原图大2
    mask = np.ones([402, 402, 1], np.uint8)
    # 将下面的区域赋值为0
    mask[101:301, 101:301] = 0
    # 进行指定位置填充
    cv.floodFill(image, mask, (200, 200), (0, 0, 255),(10,10,10),(10, 10, 10), cv.FLOODFILL_MASK_ONLY)
    cv.imshow("floodFill2", image)

if __name__ == '__main__':
    '''
    ROI切片填充jie_image()
    '''
    # src = cv.imread("pic/cat.jpg")
    # cv.imshow("original", src)
    # jie_image(src)
    # cv.waitKey(0)
    # cv.destroyAllWindows()

    '''
    泛洪填充fill_image()
    '''
    # src = cv.imread("pic/cat.jpg")
    # cv.imshow("original", src)
    # fill_image(src)
    # cv.waitKey(0)
    # cv.destroyAllWindows()

    '''
    指定位置填充fill_binary()
    '''
    fill_binary()
    cv.waitKey(0)
    cv.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

缄默:)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值