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)