openCV第五课 ROI 与 泛宏填充

#File Name : 第五课.py

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) # 尺寸要注意
    print(image[100,100,:])
    cv.floodFill(copyImg,mask,(100,100),(0,255,255),(100,100,100),(30,30,30),cv.FLOODFILL_FIXED_RANGE)
    #这个掩膜mask,就是用于进一步控制哪些区域将被填充颜色(比如说当对同一图像进行多次填充时)。
    #第二个参数, InputOutputArray类型的mask,这是第二个版本的floodFill独享的参数,表示操作掩模,
    # 它应该为单通道、8位、长和宽上都比输入图像 image 大两个像素点的图像。第二个版本的floodFill需要
    # 使用以及更新掩膜,所以这个mask参数我们一定要将其准备好并填在此处。需要注意的是,漫水填充不会填
    # 充掩膜mask的非零像素区域。例如,一个边缘检测算子的输出可以用来作为掩膜,以防止填充到边缘。
    # 同样的,也可以在多次的函数调用中使用同一个掩膜,以保证填充的区域不会重叠。另外需要注意的是,
    # 掩膜mask会比需填充的图像大,所以 mask 中与输入图像(x,y)像素点相对应的点的坐标为(x+1,y+1)。
    #第三个参数,Point类型的seedPoint,漫水填充算法的起始点。
    #第四个参数,Scalar类型的newVal,像素点被染色的值,即在重绘区域像素的新值。
    #第五个参数,Rect*类型的rect,有默认值0,一个可选的参数,用于设置floodFill函数将要重绘区域的最小边界矩形区域。
    #第六个参数,Scalar类型的loDiff,有默认值Scalar( ),表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度或颜色之负差(lower brightness/color difference)的最大值。 
    #第七个参数,Scalar类型的upDiff,有默认值Scalar( ),表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度或颜色之正差(lower brightness/color difference)的最大值。
    #第八个参数,int类型的flags,操作标志符,此参数包含三个部分,比较复杂,我们一起详细看看。
    #FLOODFILL_FIXED_RANGE - 如果设置为这个标识符的话,就会考虑当前像素与种子像素之间的差,否则就考虑当前像素与其相邻像素的差。也就是说,这个范围是浮动的。
    #FLOODFILL_MASK_ONLY - 如果设置为这个标识符的话,函数不会去填充改变原始图像 (也就是忽略第三个参数newVal), 而是去填充掩模图像(mask)。这个标识符只对第二个版本的floodFill有用,因第一个版本里面压根就没有mask参数。
    cv.imshow('fill_color_demo',copyImg)
    
def fill_bin():
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300,:] = 255
    cv.imshow('fill_bin',image)
    mask = np.ones([402,402,1],np.uint8)
    # 只会改变0区域 而非零不会改变
    mask[101:301,101:301] = 0
    cv.floodFill(image,mask,(200,200),(255,255,0),cv.FLOODFILL_MASK_ONLY)
    cv.imshow('bin',image)

# ROI
src1 = cv.imread('G:/openCV/opencv/sources/samples/data/messi5.jpg')
ball = src1[280:340,330:390]
src1[200:260,100:160] = ball
#cv.imshow('test',src1)
#fill_color_demo(src1)
fill_bin()
cv.waitKey(0)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值