Opencv 如何获取roi区域

这篇具有很好参考价值的文章主要介绍了Opencv 如何获取roi区域。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于图片处理,经常遇到的一个问题是如何获取roi区域(说白了就是抠图),并对roi区域赋值,比如说赋值成黑色。

首先,关于如何获取roi区域,opencv的Mat类中提供了两种方法。代码如下:

Mat 	operator() (Range rowRange, Range colRange) const 
 
Mat 	operator() (const Rect &roi) const

上述两种获取roi的方式是通过重载()运算符实现的,根据上面的描述可以看到通过上面两种方法仅可以实现矩形roi区域的获取。使用实例如下:

Mat img = imread("...."); //加载图片到img中
//subImg就是从图像img中截取的Roi区域,该区域的大小就是指定的矩形的大小
Mat subImg = img(Range(30,100), Range(50,150));


//方法二
Mat img1 = img(Rect(50,50.100.100)); //通过Rect的方式截取Roi区域

上面的两中方法均可以实现矩形ROI区域的截取,截取的结果可以在IMAGE WATCH中查看。

思考:除了矩形的ROI,是否存在非矩形ROI区域的截取?答案是肯定的,那我们如何在一个图片任意的获取ROI区域呢?通常来说我们采用的就是通过mask(掩膜)的方式来实现,Mat提供了setto和copyto的接口,其中setto方法是浅拷贝,而copyto是深拷贝。以setto举例来说。如果我们想在原图上截取一个任意多边形的ROI区域?我们首先要创建一个MASK,该mask的大小必须与操作图像的size保持一致,否则mask是无效的。然后通过图像的基本绘制方法(circle/rectangle/ellipse/polylines/fillpoly/drawContours)绘制基本图形,并将绘制的图形进行填充(注意一定要填充为非0值,这与掩膜的原理有关系,只有mask掩膜的值非0的区域才会进行操作,以setto为例,第二个参数就是mask,mask中非0的位置才会将第一个参数的值付给对应位置的像素)。mask(掩膜)制作完成后,一定调用setto方法对原图像进行赋值处理。结果就是原图像mask中非0区域的值已经设置为对应的值。代码如下:

Mat img = imread("...."); //加载图片到img中
Mat mask = img(Size(img.cols,img.rows),CV_32FC1); //创建掩膜,该掩膜的大小与img一致
circle(mask, Point(50,50),50,Scalar(1));  //画一个圆需要指定圆心坐标和半径
img.setTo(0, mask);  //将mask非0的区域对应的图像设置为黑色
img.setTo(Vec3b(23, 23, 23),mask);  //设置三通道数据

copyto方法的使用同理,只不过一个修改的原图像,一个是修改的新图像,需要注意的是调用copyTo方法生成的图片的大小还是与原图像一致的,虽然仅仅显示了ROI区域的内容。

再进一步的思考:我们是否可以灵活的指定ROI区域呢?

答案同样是肯定,举一个例子,我们可以通过鼠标事件来获取感兴趣区域的坐标然后进行“抠图”操作,方法还是一样的。文章来源地址https://www.toymoban.com/news/detail-698432.html

到了这里,关于Opencv 如何获取roi区域的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-07-感兴趣区域(ROI)

    在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区 域(Region of Interest,ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。 以下是一些 的例子: 目标检测和跟踪 :在计算机视觉中,目标检测和跟踪是常见的任务。通过使用

    2024年02月16日
    浏览(45)
  • OpenCV截取ROI区域——多种形状(圆形)

    背景:在做一个中国象棋机器人的项目,项目中需要识别象棋棋子上的汉字,计划采用CNN的方式实现这一功能。在制作CNN训练的数据集的时候,需要一个截取象棋中心文字的问题。当我们定位到一个象棋的位置之后,我首先将包裹象棋的一个50*50的矩形取阈截取出来,但是,

    2024年02月16日
    浏览(47)
  • opencv基础-07-感兴趣区域(ROI)

    在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区 域(Region of Interest,ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。 以下是一些 的例子: 目标检测和跟踪 :在计算机视觉中,目标检测和跟踪是常见的任务。通过使用

    2024年02月13日
    浏览(36)
  • OpenCV学习笔记 | ROI区域选择提取 | Python

            ROI区域是指图像中我们感兴趣的特定区域,OpenCV提供了一些函数来选择和提取ROI区域,我们可以使用OpenCV的鼠标事件绑定函数,然后通过鼠标操作在图像上绘制一个矩形框,该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要函数 cv2.setMouseCallback、def sele

    2024年02月07日
    浏览(41)
  • 迅为RK3568开发板使用OpenCV处理图像-ROI区域-位置提取ROI

    在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。 位置提取 ROI 本小节代码在配套资料“iTOP-3568 开发板\\03_【iTOP-RK3568 开发板】指南教程\\04_OpenCV 开发配

    2024年02月21日
    浏览(37)
  • 【OpenCV】OpenCV:计算机视觉的强大工具库

    摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,

    2024年02月03日
    浏览(45)
  • OpenCV第 1 课 计算机视觉和 OpenCV 介绍

      我们人类可以通过眼睛看到五颜六色的世界,是因为人眼的视觉细胞中存在分别对红、绿、蓝敏感的 3 种细胞。其中的光感色素根据光线的不同进行不同比例的分解,从而让我们识别到各种颜色。   对人工智能而言,学会“ 看 ”也是非常关键的一步。那么机器人是如

    2024年01月24日
    浏览(48)
  • 6. QT环境下使用OPenCV(利用鼠标实现图像的ROI区域选择)

    1. 说明 一张图像显示的内容可能并非所有的都是有用信息,有时需要选定某些区域做出特殊的处理。在OPenCV当中可以在图像上响应鼠标的操作,选取出图像上的特殊区域 — ROI区域。 效果展示: 2. 实现步骤 首先在QtCreator中创建一个新的widget项目,并配置好OPenCV的开发环境,

    2024年02月12日
    浏览(46)
  • 【计算机视觉 · OpenCV】使用 OpenCV 调用手机摄像头

    Droidcam 是一款可以将手机变成网络摄像头的工具,我们可以利用 Droidcam 让 OpenCV 拥有调用手机摄像头的能力。 2.1 安装 DroidCam 在手机和电脑上分别安装 DroidCam 的客户端和服务端 下载地址:https://pan.baidu.com/s/1DrBn3P1Bx-SXa4d6oziifA?pwd=gr1o 提取码:gr1o 2.2 测试连接状态 手机和电脑需

    2024年02月09日
    浏览(48)
  • 计算机视觉(OpenCV+TensorFlow)

    本系列文章是OpenCV系列文章的第三篇,仍然跟随上篇内容主要聚焦于图像的一些操作 在通常情况下我们使用大小恒定的图像。但在某些情况下,我们需要使用不同分辨率的同幅图像,例如,在搜索图像中的某些内容比如脸部信息时,并不确定该内容在图像中占据的大小。这种

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包