当前位置:网站首页>实战解惑 | OpenCV中如何提取不规则ROI区域
实战解惑 | OpenCV中如何提取不规则ROI区域
2022-07-04 12:52:00 【小白学视觉】
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
什么是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区域生成。
方法一:
通过手动选择,然后通过多边形填充即可做到,代码实现如下:
import cv2 as cv
import numpy as np
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提取然后重新背景融合之后生成新图像效果:
好消息!
小白学视觉知识星球
开始面向外开放啦
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
边栏推荐
- ML之shap:基于boston波士顿房价回归预测数据集利用Shap值对LiR线性回归模型实现可解释性案例
- MySQL之详解索引
- gin集成支付宝支付
- LiveData
- PHP log debugging
- R language ggplot2 visualization: gganimate package creates animated graph (GIF) and uses anim_ The save function saves the GIF visual animation
- 【信息检索】分类和聚类的实验
- 富文本编辑:wangEditor使用教程
- [FAQ] Huawei Account Service Error Report 907135701 Common reasons Summary and Solutions
- Visual Studio调试方式详解
猜你喜欢
Test evaluation of software testing
Understand chisel language thoroughly 12. Chisel project construction, operation and testing (IV) -- chisel test of chisel test
Hardware Basics - diode Basics
10.(地图数据篇)离线地形数据处理(供Cesium使用)
MySQL之详解索引
sharding key type not supported
第十七章 进程内存
Test process arrangement (3)
RK1126平台OSD的实现支持颜色半透明度多通道支持中文
92.(cesium篇)cesium楼栋分层
随机推荐
为什么图片传输要使用base64编码
Intelligence d'affaires bi analyse financière, analyse financière au sens étroit et analyse financière au sens large sont - ils différents?
R language uses the DOTPLOT function of epidisplay package to visualize the frequency of data points in different intervals in the form of point graph, and uses the by parameter to specify the groupin
codeforce:C. Sum of Substrings【边界处理 + 贡献思维 + 灵光一现】
[matlab] summary of conv, filter, conv2, Filter2 and imfilter convolution functions
Redis daily notes
R语言ggplot2可视化:gganimate包创建动态折线图动画(gif)、使用transition_reveal函数在动画中沿给定维度逐步显示数据
Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
Test evaluation of software testing
Learn kernel 3: use GDB to track the kernel call chain
Abnormal value detection using shap value
Understand chisel language thoroughly 04. Chisel Foundation (I) - signal type and constant
数据埋点的一些问题和想法
R language uses follow up of epidisplay package The plot function visualizes the longitudinal follow-up map of multiple ID (case) monitoring indicators, and uses stress The col parameter specifies the
R语言使用epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布
Basic mode of service mesh
Remove duplicate letters [greedy + monotonic stack (maintain monotonic sequence with array +len)]
Understand chisel language thoroughly 06. Chisel Foundation (III) -- registers and counters
失败率高达80%,企业数字化转型路上有哪些挑战?
C # WPF realizes the real-time screen capture function of screen capture box