OpenCV中如何提取不规则ROI区域
一、什么是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提取然后重新背景融合之后生成新图像效果:
- 分享
- 举报
-
浏览量:6097次2020-12-29 14:13:00
-
浏览量:627次2024-01-12 11:39:24
-
浏览量:5816次2021-01-29 17:06:57
-
浏览量:789次2023-12-06 14:42:44
-
浏览量:4502次2021-01-27 15:15:35
-
浏览量:1305次2023-12-01 14:35:39
-
浏览量:3100次2020-07-30 18:54:07
-
浏览量:1021次2023-12-19 16:51:40
-
浏览量:6571次2021-02-06 17:02:32
-
浏览量:511次2024-02-20 10:45:20
-
浏览量:4808次2021-01-26 19:00:57
-
浏览量:608次2023-09-11 18:04:33
-
浏览量:1194次2023-01-12 15:00:04
-
浏览量:4437次2021-01-08 01:04:31
-
浏览量:677次2023-11-24 15:35:13
-
浏览量:6203次2020-12-25 23:18:24
-
浏览量:6622次2021-03-25 09:46:49
-
浏览量:4245次2021-06-30 11:34:00
-
浏览量:4465次2021-08-23 17:12:33
-
3篇
- [python opencv 计算机视觉零基础到实战] 十六、用opencv画画
- [python opencv 计算机视觉零基础到实战]二十、图片缩放、位移、旋转
- 基于OpenCV的边缘检测实战
- [python opencv 计算机视觉零基础到实战]二十一、仿射变换与图片融合
- 索尼摄像芯片IMX385LQR索尼摄像芯片IMX323LQN-CIMX327LQR
- [python opencv 计算机视觉零基础到实战] 五、对象追踪
- 在OpenCV中基于深度学习的边缘检测
- 国产芯片风雨飘摇的二十年发展之路
- 海思IPC平台快速拔插SD卡会出现SD卡不识别解决方法
- OpenCV 3.4.12 + opencv_contrib Ubuntu交叉编译到arm(rv1126_rv1109)开发板
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
bonjour
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明