物联网
您现在所在的位置:首页>企业动态>物联网

ROI区域

编辑:学到牛牛IT培训    发布日期: 2024-01-17 09:33:29  

1、ROI简介

ROI既是提取感兴趣的区域。在图像处理中,我们常常要对某个区域进行选择、提取,然后对这个区域进行单独分析、处理、显示,这个的区域我们称为ROI区域,英文全称为Region of interest,中文名为“感兴趣区域”。

1.1 截取感兴趣区域

newImg = img[0: 100, 0: 100]

获取指定区域的图像,将结果生成新的newImg图像对象。以下示例从img图像对象中截取部分区域生成新的图像。

# 获取感兴趣的区域(ROI)

import cv2

img = cv2.imread(filename="E:/tmp/img/cat.png")


# 获取高、宽

h, w = img.shape[:2]


# 获取指定范围图像

newImg = img[100: h-100, 0: w-10]

cv2.imshow("newImg", newImg)


cv2.waitKey(0)

cv2.destroyAllWindows()


1.2 颜色通道提取

ROI操作中提供一系列的函数操作各通道。

cv2.split(img):用于拆分指定图像对象的通道。

cv2.merge((b, g, r)):组合指定BGR通道。

img.copy():复制图像对象。


案例1:单独设置通道值

# 获取感兴趣的区域(ROI)

import cv2

img = cv2.imread(filename="img/cb.jpg")


# 1、split()函数用于拆分通道,从而获取B、G、R通道的矩阵

b, g, r = cv2.split(m=img)


# 剔除B通道,将该通道中的值均改为0

b[:, :] = 0


# 2、merge()函数用于组合多个通道

img2 = cv2.merge(mv=(b, g, r))


cv2.imshow(winname="test", mat=img2)

cv2.waitKey(0)

cv2.destroyWindow()


案例2:设置指定通道值

import cv2

img = cv2.imread(filename="img/cb.jpg")


# 通过通道下标设置指定通道值。

# 前两个“:”表示图像的形态;最后一个参数为“:”表示针对所有通道、0表示B、1表示G、2表示R

img[:, :, 1] = 255


# 限定指定的范围,修改B通道的值;其中100:250表示高,200:300表示宽

# img[100:250, 200:300, 0] = 255

cv2.imshow(winname="test", mat=img)

cv2.waitKey(0)

cv2.destroyWindow()

运行结果:


1.png


2、边界填充

如果您想给自己的图片设置边界框,就像一个相框一样,就可以使用cv2.copyMakeBorder()函数为图像对象设置边界。语法格式如下。

cv2.copyMakeBorder(src, top, bottom, left, right, borderType, value=None)


src:图像对象;

top:图像顶部边框宽度;

bottom:图像底部边框宽度;

left:图像左边边框宽度;

right:图像右边边框宽度;

borderType:边框填充的类型,有以下常用方法。

cv2.BORDER_REPLICATE:复制法,复制最边缘像素填充边界(即将边缘像素进行拉伸填充)。

cv2.BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行镜像复制。例如:cba|abcdefg|gfe。

cv2.BORDER_WRAP:外包装法,使用图像平铺边界。

cv2.BORDER_CONSTANT:常量法,以常量数值填充边界,需使用value参数设置常量值,例如:value=(21, 255, 252)


各类型方法应用示例如下。

import cv2

img = cv2.imread("E:/tmp/img/cat.png")


# 定义需要填充的边界

top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)


# 复制法

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

# 反射法

reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)

# 包裹法

wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)

# 常量填充法

constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT, value=(21, 255, 252))


cv2.imshow("replicate", replicate)

cv2.imshow("reflect", reflect)

cv2.imshow("wrap", wrap)

cv2.imshow("constant", constant)


cv2.waitKey(0)

cv2.destroyAllWindows()


运行结果如下。


2.png


图2.1 复制法和反射法


3.png

图2.2 包裹法和常量法







免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    扫一扫,免费咨询

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    微信公众号

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

学一流技术,找高薪工作

物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问