OpenCV学习笔记-ROI和泛洪填充

ROI:ROI区域即一张图上你感兴趣的区域,可以用数组切片的方式选出图像的特定区域,对ROI区域的操作,也会反应在原图上。
具体代码:

 
   
face = img[ 200: 400, 200: 400] #利用numpy数组访问特定区域
gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY) #转化为单通道灰度图
backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR) #将灰度图从单通道转换成三通道
img[ 200: 400, 200: 400]=backface #将原图ROI区域变成灰色
泛洪填充:即指定图中某一像素点,以该像素点为基准点,设置像素值的上限与下线,所有处于上下限范围内的像素,都会被填充为指定的新颜色。
具体代码:

 
  

def fill_color_demo(img):
     CopyImg = img.copy()
     h ,w = img.shape[: 2]
     mask = np.zeros([h+ 2,w+ 2],np.uint8)
   #调用泛洪填充时,只有mask参数中像素值为0的区域才会被填充,为了覆盖整个图像,mask 区域必须要比填充的图像大2个像素  
    cv.floodFill(CopyImg,mask,( 400, 400),( 0, 255, 255),( 100, 100, 100),( 50, 50, 50),cv.FLOODFILL_FIXED_RANGE)   
    ''' FLOODFILL_FIXED_RANGE- 改变图像,泛洪填充
        floodFill(image,mask,seedPoint,newVal,rect,loDiff,upDiff,flags)    
        seedPoint:种子像素,填充的起始点像素    
        newVal:要填充的颜色    
        loDiff:规定像素值的下限
        upDiff:规定像素值的上限    
        seedPoint.BGR - loDiff <= 被填充像素值 <= seedPoint.BGR + upDiff
        即 seedPoint的BGR各减去loDiff <= 要填充的颜色范围 <= seedPoint的BGR各加上upDiff
      '''
    cv.imshow( 'fill_color',CopyImg)

二值填充:通过限定mask中像素值为0的区域来规定填充区域。

具体代码:
def fill_binary():
    img = np.zeros([400,400,3],np.uint8)
    img[100:300,100:300,:]=255
    cv.imshow('fill_binary',img)

    #在进行二值填充是  mask层必须全部初始化为1 想填充的区域 初始化为0
    mask = np.ones([402,402,1],np.uint8)
    mask[101:301,101:301]=0
    cv.floodFill(img,mask,(200,200),(100,2,255),cv.FLOODFILL_MASK_ONLY)
    # FLOODFILL_MASK_ONLY - 不改变图像,只填充遮罩层本身,忽略新的颜色值参数
    cv.imshow('filled binary',img)

你可能感兴趣的:(OpenCV学习笔记-ROI和泛洪填充)