open cv2学习(五):ROI与泛洪填充

一、ROI定义

  图像的 ROI(region of interest) 是指图像中感兴趣区域、
  在 OpenCV 中图像设置图像 ROI 区域,实现只对 ROI 区域的操作。

二、获取ROI

 NewImg =img[a:b, c:d]     截取img中a~b 与 c~d之间的图像

三、泛洪填充 cv2.floodFill(img, mask, seedPoint, newVal, rect, loDiff,upDiff, flags)

1.img:【输入】1或者3通道、 8bit或者浮点图像。仅当参数flags的FLOODFILL_MASK_ONLY标志位被设置时image不会被修改,否则会被修改。
  mask :【输出】 操作掩码,必须为单通道、8bit,且比image宽2个像素、高2个像素。使用前必须先初始化。
              Flood-filling无法跨越mask中的非0像素。例如,一个边缘检测的结果可以作为mask来阻止边缘填充。
              在输出中,mask中与image中填充像素对应的像素点被设置为1,或者flags标志位中设置的值此外,
              该函数还用1填充了mask的边缘来简化内部处理。因此,可以在多个调用中使用同一mask,以确保填充区域不会重叠。
  seedPoint: 起始像素点。   
  newVal  : 重绘像素区域的新的颜色填充值(B, G,R)。   
  rect    :  可选输出参数,返回重绘区域的最小绑定矩形。    
  loDiff(lo1,lo2,lo3)  当前选定像素与其连通区中相邻像素中的一个像素,或者与加入  
                该连通区的一个seedPoint(B0, G0,R0)像素,二者之间的最大下行差异值。目标像素值的最小为(B0-lo1,G0-lo2,R0-lo3)   
  upDiff(up1,up2,up3)   当前选定像素与其连通区中相邻像素中的一个像素,或者与加入  
                  该连通区的一个seedPoint(B0, G0,R0)像素,二者之间的最大上行差异值。目标像素值的最大为(B0+up1,G0+up2,R0+up3)   
  flags     flags标志位是一个32bit的int类型数据,其由3部分组成: 0-7bit表示邻接性(4邻接、8邻接); 8-15bit表示mask的填充颜色;16-31bit表示填充模式  
  通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.返回重绘区域的最小绑定矩形, 6.填充颜色的低值, 7.填充颜色的高值 ,8.填充的方法)  

2.填充方法:

  FLOODFILL_FIXED_RANGE :改变图像,颜色填充      
  FLOODFILL_MASK_ONLY : 不改变图像,只填充遮罩层本身、忽略新的颜色值参数   
                        mask的指定的位置为零时才填充,不为零不填充

3.测试代码:

  • 1)指定位置填充
#1.指定位置填充
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("define", image)    
    cv.imwrite('define.jpg',image)    
    # mask 的高宽比原图多2,即h 2,w 2    
    mask = np.ones([202, 202, 1], np.uint8)    
    # mask需要填充的位置的像素设置为0    
    mask[100:150, 100:150] = 0    
    #调用floodFill函数填充 (0,0,255)指定红色填充    
    cv.floodFill(image, mask, (100, 100), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)    
    cv.imshow("fill2", image)    
    cv.imwrite('fill2.jpg',image)
    fill2_image()
    cv.waitKey(0)
    cv.destroyAllWindows()
  • 2)指定颜色填充代码
#2.指定颜色填充代码
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)    
    #(0,80) 起始点,(0,100,255) 蓝色 ,(100,100,50)棕色 ,(50,50,50) 浅黑    
    cv.floodFill(copyImage,mask,(0,80),(0,100,255),(100,100,50),(50,50,50),cv.FLOODFILL_FIXED_RANGE)    
    cv.imshow('fill',copyImage)
    src=cv.imread('./hua.jpg')
    cv.imshow('before',src)
    fill_image(src)
    cv.waitKey(0)
    cv.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值