什么是ROI
ROI是英文Region Of Interest的三个首字母缩写,很多时候我们对图像的分析就是对图像特定ROI的分析与理解,对细胞与医疗图像来说,ROI提取正确才可以进行后续的分析、测量、计算密度等,而且这些ROI区域往往不是矩形区域,一般都是不规则的多边形区域,很多OpenCV初学者都不知道如何提取这些不规则的ROI区域。其实OpenCV中有个非常方便的API函数可以快速提取各种非正常的ROI区域。
提取ROI区域
在做这个之前,首先来了解一下什么图像处理中的mask(遮罩),OpenCV中是如此定义Mask的:八位单通道的Mat对象,每个像素点值为零或者非零区域。当Mask对象添加到图像区上时,只有非零的区域是可见,Mask中所有像素值为零与图像重叠的区域就会不可见,也就是说Mask区域的形状与大小直接决定了你看到最终图像的大小与形状。一个具体的示例如下:
可以看出,mask的作用是可以 帮助我们提取各种不规则的区域。OpenCV中完成上述步骤操作只需要简单调用API函数bitwise_and即可。
于是另外一个问题也随之而来,我们怎么生成这样mask区域,答案是在OpenCV中有两种方法搞定Mask区域生成。
方法一:
通过手动选择,然后通过多边形填充即可做到,代码实现如下:
importcv2ascv importnumpyasnp src=cv.imread("D:/images/gc_test.png") cv.imshow("input",src) h,w,c=src.shape #手工绘制ROI区域 mask=np.zeros((h,w),dtype=np.uint8) x_data=np.array([124,169,208,285,307,260,175]) y_data=np.array([205,124,135,173,216,311,309]) pts=np.vstack((x_data,y_data)).astype(np.int32).T cv.fillPoly(mask,[pts],(255),8,0) cv.imshow("mask",mask) #根据mask,提取ROI区域 result=cv.bitwise_and(src,src,mask=mask) cv.imshow("result",result) cv.waitKey(0)
运行效果如下:
方法二:
这个也是OpenCV新手最迷茫的地方,如何通过程序生成mask,其实真的很简单。看代码演示吧!
src=cv.imread("D:/images/gc_test.png") cv.imshow("input",src) #生成mask区域 hsv=cv.cvtColor(src,cv.COLOR_BGR2HSV) mask=cv.inRange(hsv,(156,43,46),(180,255,255)) cv.imshow("mask",mask) #提取ROI区域,根据mask result=cv.bitwise_and(src,src,mask=mask) cv.imshow("result",result) cv.waitKey(0)
效果如下:
主要是分为三步
提取轮廓ROI
生成Mask区域
提取指定轮廓
特别需要注意的是->其中生成Mask可以根据轮廓、二值化连通组件分析、inRange等处理方法得到。这里基于inRange方式得到mask区域,然后提取。
实际应用演示
最后看两个在实际处理会用到mask实现ROI提取然后重新背景融合之后生成新图像效果:
编辑:jq
-
API
+关注
关注
2文章
2147浏览量
66238 -
代码
+关注
关注
30文章
4941浏览量
73149 -
OpenCV
+关注
关注
33文章
651浏览量
44420 -
mask
+关注
关注
0文章
10浏览量
3188
原文标题:OpenCV中如何提取不规则ROI区域
文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
倍加福全新推出R305反射板式区域传感器
【嘉楠堪智K230开发板试用体验】高校竞赛-2025电赛-E题
零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!
如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?
找正方形的代码我把roi删除过后能识别到正方形,加上roi后就识别不出来,为什么?
【GM-3568JHF开发板免费体验】OpenCV开发环境安装和计数程序开发
【GM-3568JHF开发板免费体验】OpenCV 视频目标跟踪 ( CamShift)
Litestar 4D:运动场所照明
KiCad 中的自定义规则(KiCon 演讲)
基于LockAI视觉识别模块:C++使用图像的统计信息
基于LockAI视觉识别模块:C++使用图像的统计信息
边缘设备的奇妙之旅:在小凌派-RK2206上部署AI模型来实现视觉巡线
为LSDK构建opencv时遇到的问题求解
如何在特定区域设置线宽、线距规则

简述OpenCV中如何提取不规则ROI区域
评论