1 简述OpenCV中如何提取不规则ROI区域-德赢Vwin官网 网
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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1499

    浏览量

    61954
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68516
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41336
  • mask
    +关注

    关注

    0

    文章

    10

    浏览量

    2905

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

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

收藏 人收藏

    评论

    相关推荐

    ADC3663测电阻两段电压,信号在5mV~100mV不规则波动, 可以测吗?

    ADC3663是差分输入,我的测试需求是这样的,可以使用吗 1. 电源的电压信号,比如在1V附近不规则变化. 那可以INP端接电源,INM接地吗 2. 测电阻两段电压,信号在5mV~100mV不规则波动, 可以测吗?
    发表于 11-22 09:48

    如何提取直流信号的交流分量?

    我想将直流功率回路电流的交流分量进行采集并给微机处理,此交流分量在电路正常时候就是功率电源的纹波,当电路发生故障时电路的交流分量会叠加一个200mV左右峰峰值的噪声信号(无规律),请问我如何提取直流信号
    发表于 09-20 07:04

    简述MOS管的工作区域

    MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor,金属-氧化物半导体场效应晶体管)是电子电路中广泛使用的元件,具有三个主要的工作区域:截止
    的头像 发表于 09-14 17:10 3191次阅读

    【龙芯2K0300蜂鸟板试用】5 搭建opencv开发环境

    在官方提供的buildroot根文件系统,不支持opencv库,故需要自己增加,另外,在本地编译的时候,需要在本地(ubuntu)上安装对应opencv库,这样才能将编译好的镜像放到板子上跑起来
    发表于 08-27 15:08

    OpenCV图像识别C++代码

    安装OpenCV库 首先,您需要在您的计算机上安装OpenCV库。您可以从OpenCV官网下载预编译的库或从源代码编译。安装完成后,确保将OpenCV的头文件和库文件添加到您的项目中。
    的头像 发表于 07-16 10:42 1962次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV
    的头像 发表于 07-16 10:38 1154次阅读

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了大量的计算机视觉算法和工具。以下是OpenCV的主要功能: 图像处理
    的头像 发表于 07-16 10:35 1496次阅读

    OpenCV携奥比光3D相机亮相CVPR 2024

    6月17日-21日,奥比光合作伙伴OpenCV携Orbbec 3D相机参展在美国西雅图举办的CVPR 2024(即IEEE国际计算机视觉与模式识别会议),让开发者亲身体验Orbbec 3D相机
    的头像 发表于 06-21 09:38 544次阅读

    三维扫描产品外观提取不规则外观轮廓线辅助贴纸设计方案

    三维扫描技术是集光学、机电和计算机技术于一体的高新无损检测技术。CASAIM三维扫描设备,能够对实物的空间外形、结构乃至色彩进行全方位的扫描,将复杂的立体信息快速转换为计算机能直接处理的数字信号。这一技术能够精确地获取物体表面的空间坐标,为实物提取轮廓线提供了快捷、精确及方便的手段。
    的头像 发表于 06-11 15:58 254次阅读
    三维扫描产品外观<b class='flag-5'>提取</b><b class='flag-5'>不规则</b>外观轮廓线辅助贴纸设计方案

    I.MX6ULL-飞凌 ElfBoard ELF1板卡 - 如何在Ubuntu编译OpenCV库(X86架构)

    在之前发布的文章探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在 Ubuntu 环境下将 OpenCV 编译为 X86 架构可能更加方便和高效。 通过在主机上编译并
    发表于 06-07 09:32

    嵌入式学习-飞凌ElfBoard ELF 1板卡 - 如何在Ubuntu编译OpenCV

    在之前发布的文章探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在 Ubuntu 环境下将 OpenCV 编译为 X86 架构可能更加方便和高效。 通过在主机上编译并
    发表于 06-07 09:21

    ELF 1技术贴|如何在Ubuntu编译OpenCV

    在之前发布的文章探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在Ubuntu环境下将OpenCV编译为X86架构可能更加方便和高效。通过在主机上编译并使用X86架构
    的头像 发表于 05-31 16:41 1162次阅读
    ELF 1技术贴|如何在Ubuntu<b class='flag-5'>中</b>编译<b class='flag-5'>OpenCV</b>库

    请问STM32_ImageProcessingLibrary中有类似于opencv的findContours函数吗?

    STM32_ImageProcessingLibrary中有类似于opencv的findContours函数吗?
    发表于 03-07 07:17

    二值图像连通区域的标记原理

    ,即给每个连通区域一个唯一的标识符。 连通区域标记是图像分析和图像处理的一个重要步骤,可以用于图像分割、边缘检测、目标提取、形状描述等应用。在本文中,我们将介绍二值图像连通
    的头像 发表于 01-05 14:28 831次阅读

    AD芯片采用外部时钟时,外部时钟源可以是不规则的TTL电平吗?

    AD芯片采用外部时钟时,外部时钟源可以是不规则的TTL电平吗? 该TTL电平具体表现为,频率由低到高,再由高到低,最大100K,每一个电平高电平是恒定的,低电平在不停的变化。 这样的TTL电平能作为AD芯片的采样时钟吗
    发表于 12-22 08:31