一、ROI提取
1、定义:ROI提取称对感兴趣区域提取。
2、作用:勾勒感兴趣的区域,可以是方框、圆、椭圆、不规则形状等。
3、应用:以视频监控领域ROI智能视频编码技术为例,具有ROI功能的摄像机可以让用户选择画面中感兴趣的区域,对重要的或者移动的区域将会进行高质量无损编码;对那些不移动,不被选择的区域降低其码率和图像质量,进行标准清晰度视频压缩或传输这部分区域视频,以达到节省网络带宽占用和视频存储空间。
# ROI提取区域
face = src[120:250, 200:450] # 前面高度,后面宽度
hsv = cv.cvtColor(face, cv.COLOR_RGB2HSV)
backface = cv.cvtColor(hsv, cv.COLOR_HSV2BGR)
src[120:250, 200:450] = backface
cv.imshow('face', src)
二、泛洪填充
FLOODFILL_FIXED_RANGE – 改变图像,泛洪填充
FLOODFILL_MASK_ONLY –不改变图像、只填充遮罩层本身、忽略新的颜色值参数
1、原理:以指定的像素点为基点,设置像素值的上限与下限,所有处于上下限范围内的像素,都会被填充为新的颜色。
2、实现算法:有四邻域像素填充法,八邻域像素填充法,基于扫描线的像素填充方法等。
3、彩色图像填充
# 彩色图像的填充
def fill_color_demo(image):
copyImg = image.copy()
h, w = image.shape[:2]
"""
np.zeros (shape, dtype, order)
Shape: 可以是一维、二维、三维.其中三维,shape = [m , a, b] 表示生成m个a*b的0矩阵
dtype:可选参数;数据类型,默认numpy.float64
order: 可选参数;c代表与c语言类似,行优先;F代表列优先
"""
mask = np.zeros([h + 2, w + 2], np.uint8)
# 参数:1原图,2mask图,3起始点,4填充的颜色 5起始点值减去该值作为最低值,6起始点值加上该值作为最高值,7彩色图模式,最高值与最低值之间是填充的颜色
cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
cv.imshow('fill_color_demo', copyImg)
4、二值图像填充
# 二值图像的填充
def fill_binary():
image = np.zeros([400, 400, 3], np.uint8)
image[100:300, 100:300, :] = 255
cv.imshow('fill_binary', image)
"""
ones()函数返回给定形状和数据类型的新数组,其中元素的值设置为1.
shape:一个整数类型或者一个整数元组,用于定义数组的大小。如果仅指定一个整数类型变量,则返回一维数组。如果指定的是整数元组,则返回给定形状的数组.
"""
mask = np.ones([402, 402, 1], np.uint8) # 必须是mask.rows == size.height+2 && mask.cols == size.width+2
mask[101:301, 101:301] = 0
# FLOODFILL_MASK_ONLY - 这个标识符时函数不会去填充改变原始图像 (也就是忽略第三个参数), 而是去填充掩模图像(mask)。
# mask的指定的位置为零时才填充,不为零不填充
cv.floodFill(image, mask, (200, 200), (66, 66, 255), cv.FLOODFILL_MASK_ONLY)
cv.imshow('filled_binary', image)
def fill_binary(image):
copyImg = image.copy()
copyImg[120:250, 200:450, :] = 255
h, w = copyImg.shape[:2]
print(copyImg.shape[:2])
mask = np.ones([h + 2, w + 2], np.uint8) # 必须是mask.rows == size.height+2 && mask.cols == size.width+2
mask[121:251, 201:451] = 0 # mask的指定的位置为零时才填充,不为零不填充
# FLOODFILL_MASK_ONLY - 这个标识符时函数不会去填充改变原始图像 (也就是忽略第三个参数), 而是去填充掩模图像(mask)。
cv.floodFill(copyImg, mask, (200, 200), (0, 165, 255), cv.FLOODFILL_MASK_ONLY)
cv.imshow('filled_binary', copyImg)