6.ROI与泛洪填充

学习视频可参见python+opencv3.3视频教学 基础入门

ROI与泛洪填充

1.ROI

  • ROI(region of interest),感兴趣区域

  • 对lena图进行脸部的获取,代码如下

  • def roi_test(src):
        #第一个参数,高度范围,第二个参数宽度范围
        face = src[200:410, 200:400]
        gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY)  # face彩色图片变成灰度图片
        cv.imshow("gray", gray)
        back_face = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)  #转化后的灰度图是单通道的,所以要转乘三通道进行合并
        cv.imshow("back_face", back_face)
        src[200:410, 200:400] = back_face
        cv.imshow("face", src)
    
  • 注意转化转化后的灰度图是单通道的,所以要转成三通道进行合并

  • 结果如下

  • (210, 200)
    (210, 200, 3)
    
  • image-20201004220548419

  • image-20201004220607593

2.泛洪填充

  • 简而言之,就是把你想要填充的区域填充成你想要的颜色

  • floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)
    
    • Iimage:输入图像,可以是一通道或者是三通道。

    • seedPoint:泛洪填充的种子点,即起始点。

    • newVal:被填充的像素点新的像素值

    • loDiff:表示当前的观察点像素值与其相邻区域像素值或待加入该区域的像素之间的亮度或颜色之间负差的最大值。

    • upDiff:表示当前的观察点像素值与其相邻区域像素值或待加入该区域的像素之间的亮度或颜色之间负差的最小值。

    • CV_FLOODFILL_FIXED_RANGE 时,待处理的像素点与种子点作比较,在范围之内,则填充此像素 。(改变图像)

      关于floodFill函数的详细内容可参见OpenCv漫水填充floodFill详解

  • 测试用例1,彩色图像

  • def fill_color_demo(image):
        copyImg = image.copy()
        h, w = image.shape[:2] #获得高,宽
        print(copyImg)
        mask = np.zeros([h+2, w+2], np.uint8)  #+2 个人感觉就是一个padding
    
        # 参数:原图,mask图,起始点,重绘像素区域的新的填充值(颜色),起始点值减去该值作为最低值,起始点值加上该值作为最高值,彩色图模式
        #如若像素点在最低值和最高值发范围内则进行填充新设置的颜色
        cv.floodFill(copyImg, mask, (100, 100), (0, 255, 255), (100,100,100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
        print(copyImg)
        cv.imshow("fill_color_demo", copyImg)
    
    • mask必须是单通道,且必须h+2,w+2
  • 结果如下:

  • image-20201006160135417

  • 测试用例2,二值图像

  • def fill_binary():
        image = np.zeros([400, 400, 3], np.uint8)
        image[100:300, 100:300, :] = 255
        cv.imshow("fill_binary", image)
    
        mask = np.ones([402, 402, 1], np.uint8) #单通道,h+2,w+2,就是padding=1
        mask[101:301, 101:301] = 0     #填充区域,对应原图白色位置
    
        cv.floodFill(image, mask, (200, 200), (0, 2, 255), cv.FLOODFILL_MASK_ONLY)
        cv.imshow("filled binary", image)
    
    

image-20201006161125441

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值