ROI感兴趣区域提取与泛洪填充

在这里插入图片描述

一、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)

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值