0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

新机器视觉 来源:OpenCV学堂 作者:OpenCV学堂 2021-05-28 09:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是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
    API
    +关注

    关注

    2

    文章

    2147

    浏览量

    66238
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73149
  • OpenCV
    +关注

    关注

    33

    文章

    651

    浏览量

    44420
  • mask
    +关注

    关注

    0

    文章

    10

    浏览量

    3188

原文标题:OpenCV中如何提取不规则ROI区域

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    倍加福全新推出R305反射板式区域传感器

    在工业自动化领域,准确可靠的物体检测是实现高效生产的关键基石。倍加福全新推出的R305反射板式区域传感器,现可稳定检测高度仅2毫米的不规则形状物体,为多种复杂应用场景提供高灵活性解决方案。
    的头像 发表于 11-07 17:59 1077次阅读

    【嘉楠堪智K230开发板试用体验】高校竞赛-2025电赛-E题

    四个角点,及封装的参数类似opencvcv2.findContours等相关函数,可参考。 # -*- coding: utf-8 -*- \"\"\" @Brief
    发表于 08-21 15:32

    零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部
    的头像 发表于 08-16 16:16 884次阅读
    零成本钢铁侠手套!树莓派+<b class='flag-5'>OpenCV</b> 秒变手势遥控器!

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部
    的头像 发表于 08-14 17:45 960次阅读
    如何使用树莓派与<b class='flag-5'>OpenCV</b>实现面部和运动追踪的云台系统?

    找正方形的代码我把roi删除过后能识别到正方形,加上roi后就识别不出来,为什么?

    找正方形的代码我把roi删除过后能识别到正方形,加上roi后就识别不出来,更改roi为更大更稳定的范围也识别不到,麻烦解答一下,谢谢
    发表于 08-14 06:23

    【GM-3568JHF开发板免费体验】OpenCV开发环境安装和计数程序开发

    ,所以程序 要先将彩色图像转成灰度图像,是图像的物品更为明显,从而根据色差识别轮廓区域,有几个轮廓区域就代表有几个物品或动物。
    发表于 08-09 13:30

    【GM-3568JHF开发板免费体验】OpenCV 视频目标跟踪 ( CamShift)

    目标区域的质心。 3)移动窗口:将窗口中心移动到质心位置。 4)调整窗口大小和方向:根据目标的尺寸和方向调整窗口。 5)迭代:重复步骤 2 到 4,直到窗口中心不再变化或达到最大迭代次数。 OpenCV
    发表于 08-09 13:19

    Litestar 4D:运动场所照明

    的Dxf文件 手动插入单个灯具或灯具组(例如在高桅杆上) 定义被检查运动区(篮球场、足球场、手球场等)的特征线 通过规则不规则工作平面定义特殊计算区域 参数计算: 照度和亮度 眩光 (GR
    发表于 06-17 08:56

    KiCad 的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 的自定义
    的头像 发表于 06-16 11:17 1460次阅读
    KiCad <b class='flag-5'>中</b>的自定义<b class='flag-5'>规则</b>(KiCon 演讲)

    基于LockAI视觉识别模块:C++使用图像的统计信息

    和最大值:帮助识别图像的极端像素值及其位置。 2.API文档 2.1 头文件 #include <opencv2/opencv.hpp> 2.2 提取兴趣
    发表于 05-08 10:31

    基于LockAI视觉识别模块:C++使用图像的统计信息

    在图像处理,统计信息可以帮助我们了解图像的特性,例如区域内的像素分布、颜色转换以及特定区域的分析。本文将介绍基于LockAI视觉识别模块如何提取兴趣
    的头像 发表于 05-08 10:09 556次阅读
    基于LockAI视觉识别模块:C++使用图像的统计信息

    边缘设备的奇妙之旅:在小凌派-RK2206上部署AI模型来实现视觉巡线

    ; } // 提取ROI区域,并转换到HSV色彩空间 cv::Mat roi_image = temp_mat(roi_rect); cv
    发表于 03-31 10:58

    为LSDK构建opencv时遇到的问题求解

    我正在尝试使用 flex-builder 来运行 bld -c opencv -r ubuntu:桌面 我想要最新版本的 OpenCV。在我的 sdk.yml 文件,我将 opencv
    发表于 03-26 08:26

    如何在特定区域设置线宽、线距规则

    “  今天偷个懒,分享一个 Hayden 大佬提供的自定义规则,非常实用。可以在特定区域(如BGA器件范围内)定义特殊的线宽、线距规则。  ” 就是下面这段自定义规则,表示 U10
    的头像 发表于 03-19 11:20 1049次阅读
    如何在特定<b class='flag-5'>区域</b>设置线宽、线距<b class='flag-5'>规则</b>

    芯片设计的设计规则检查

    设计规则检查(Design Rule Check,简称DRC)是芯片设计的一个关键步骤,旨在确保电路设计的物理布局符合制造工艺的要求。可以把它类比为建筑设计的检查流程,确保建筑图纸
    的头像 发表于 03-04 14:58 1319次阅读