opencv学习-定义感兴趣区域

转载 2013年12月05日 09:51:03

本文转载自http://blog.csdn.net/homechao/article/details/9239219

有时,我们只需要对一幅图像的一部分进行处理.本节会教会我们如何定义感兴趣的区域.

Getting ready

假设我们想合并两个不同大小的图像.例如,我们将下面的小的图标添加到我们的测试图像上:


但是使用cv::add函数要求两个图像具有相同的大小.在这个例子中,必须定义感兴趣的区域(ROI)使得cv::add可以被使用.它只会应用在和我们logo图像相同大小的ROI区域.ROI的位置将决定logo图像被插入到什么地方.

How to do it ...

第一步首先要定义ROI.一旦定义了,ROI就是作为一个普通的cv::Mat对象被定义.定义ROI的关键是指向原始图像中相同的数据缓冲.插入logo图像代码如下:

  1. // define image ROI   
  2. cv::Mat imageROI;  
  3. imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));  
  4. // add logo to image    
  5. cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);  

我们会获得如下图像:

因为logo的颜色被添加到图像中去(可能饱和度也变换),视觉效果不总是令人满意的.例如,看上去可能直接把logo图像的像素值覆盖原始图像可能更好.可以使用一个蒙板把logo图像复制ROI区域:

  1. // define ROI   
  2. imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));  
  3. // load the mask (must be gray-level)   
  4. cv::Mat mask= cv::imread("logo.bmp",0);  
  5. // copy to ROI with mask   
  6. logo.copyTo(imageROI,mask);  

这个的图像结果是:


How it works ..

定义ROI区域的一个方法是使用cv::Rect对象.从名字可以看出来,它描述了一个矩形区域通过定义左上角的点(前两个参数)和矩形区域的大小(最后两个参数的宽和高).

ROI区域同样也可以使用行和列的范围来表示.这个范围指的是一个连续的序列,开始位置到一个结束位置(不包含).cv::Range结构被用来表示这个概念.所以,一个ROI能被两个范围定义,例如,在我们的例子中,ROI可以被如下定义:

  1. cv::Mat imageROI= image(cv::Range(270,270+logo.rows),   
  2.                         cv::Range(385,385+logo.cols))  

cv::Mat的重载符号()返回了另一个我们后续会使用的cv::Mat对象.ROI像素的任何转换都会被应用在原始图像中的相应位置中去,因为原始图像和ROI区域共享的是相同的图像数据.因为定义ROI区域是并不复制数据,无论ROI区域的大小,它在一个固定的时间被执行.

如果希望对图像的一些行定义ROI,可以使用如下语句:

  1. cv::Mat imageROI= image.rowRange(start,end) ;  

像素的,如果需要对一些列进行定义:

  1. cv::Mat imageROI= image.colRange(start,end) ;  


对于只定义行或者列的ROI来说,使用在Scanning an image with neighbor 节被用来访问数据中提到的row和clo方法 .与使用start和end位置的方法是等价的.

OpenCV中感兴趣区域的选取与检测(一)

感兴趣区域的选取感兴趣区域(Region of Interest, ROI)的选取,一般有两种情形:1)已知ROI在图像中的位置;2)ROI在图像中的位置未知。1)第一种情形 很简单,根据ROI的坐标...
  • qq_23968185
  • qq_23968185
  • 2016年05月09日 09:25
  • 12340

C/C++ OpenCV设置感兴趣区域ROI

C/C++ OpenCV设置感兴趣区域RO
  • qq78442761
  • qq78442761
  • 2017年01月09日 15:05
  • 2197

基于opencv的感兴趣区域ROI的操作

本文章主要对感兴趣区域ROI的操作(对于ROI区域图像叠加)说明 在图像处理的领域,我们常常需要去设置自己感兴趣的区域(ROI,region of interest),来专注或者简化工作过程...
  • JiaFanChen
  • JiaFanChen
  • 2016年04月14日 10:16
  • 4165

opencv学习之感兴趣区域(ROI)

新手学习就是苦啊,好多东西都要一点点的摸索,之前的经验太少,积累太少,许多问题太简单了,问别人都不好开口,谁让自己太low了啊! 那就自己折腾呗…… 今天看了opencv的矩阵和图像操作部分内容,这里...
  • shihz_fy
  • shihz_fy
  • 2014年11月26日 22:11
  • 10146

opencv中感兴趣区域以及mask的使用

在图像处理的过程中,我们时常需要对指定区域或目标进行操作,这个区域我们称之为感兴趣区域。在学习opencv的初级阶段,对于感兴趣区域的操作方法是必须要掌握的。 比如下图: 我们获取到一帧图...
  • dengtaocs
  • dengtaocs
  • 2014年07月21日 19:39
  • 8656

定义感兴趣区域ROI

#include #include #include #include using namespace std; using namespace cv; int main() { cv::Mat...
  • fanpengfei0
  • fanpengfei0
  • 2014年04月15日 21:01
  • 1556

图像ROI区域的定义方式

在图像算法很多应用场合,图像中处理的目标往往位置相对固定,根据先验信息定义图像的ROI区域可以大幅减小算法的复杂度,提高算法的效率和鲁棒性。根据图像中目标的形状特征不同,ROI区域的定义方式有多种方式...
  • maja_no10
  • maja_no10
  • 2015年05月05日 17:37
  • 3175

opencv 感兴趣区域建立ROI

在对某IplImage图像用cvSetImageROI函数设置了ROI后,对图像的处理都将仅限于ROI区域,相当于该图像变为了ROI中的图像,测试代码值仅用cvCopy(复制图像的函数),进行了测试,...
  • u012590688
  • u012590688
  • 2015年07月02日 11:50
  • 950

获取图像的感兴趣区域

  • 2012年12月17日 13:26
  • 17.33MB
  • 下载

opencv-视频处理--画感兴趣区域(ROI)

感兴趣区域的划分,在视频处理中有着重要应用,用OpenCV介绍两种,在视频中标注感兴趣区域的方法:原视频:-----------------------------------------------...
  • wxcdzhangping
  • wxcdzhangping
  • 2016年07月11日 13:51
  • 10059
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv学习-定义感兴趣区域
举报原因:
原因补充:

(最多只允许输入30个字)