opencv学习-定义感兴趣区域
来源:互联网 发布:明史·海瑞传为何入乎 编辑:程序博客网 时间:2024/05/16 14:38
本文转载自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图像代码如下:
- // define image ROI
- cv::Mat imageROI;
- imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
- // add logo to image
- cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);
// define image ROI cv::Mat imageROI; imageROI= image(cv::Rect(385,270,logo.cols,logo.rows)); // add logo to image cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);
我们会获得如下图像:
因为logo的颜色被添加到图像中去(可能饱和度也变换),视觉效果不总是令人满意的.例如,看上去可能直接把logo图像的像素值覆盖原始图像可能更好.可以使用一个蒙板把logo图像复制ROI区域:
- // define ROI
- imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
- // load the mask (must be gray-level)
- cv::Mat mask= cv::imread("logo.bmp",0);
- // copy to ROI with mask
- logo.copyTo(imageROI,mask);
// define ROI imageROI= image(cv::Rect(385,270,logo.cols,logo.rows)); // load the mask (must be gray-level) cv::Mat mask= cv::imread("logo.bmp",0); // copy to ROI with mask logo.copyTo(imageROI,mask);
这个的图像结果是:
How it works ..
定义ROI区域的一个方法是使用cv::Rect对象.从名字可以看出来,它描述了一个矩形区域通过定义左上角的点(前两个参数)和矩形区域的大小(最后两个参数的宽和高).
ROI区域同样也可以使用行和列的范围来表示.这个范围指的是一个连续的序列,开始位置到一个结束位置(不包含).cv::Range结构被用来表示这个概念.所以,一个ROI能被两个范围定义,例如,在我们的例子中,ROI可以被如下定义:
- cv::Mat imageROI= image(cv::Range(270,270+logo.rows),
- cv::Range(385,385+logo.cols))
cv::Mat imageROI= image(cv::Range(270,270+logo.rows), cv::Range(385,385+logo.cols))
cv::Mat的重载符号()返回了另一个我们后续会使用的cv::Mat对象.ROI像素的任何转换都会被应用在原始图像中的相应位置中去,因为原始图像和ROI区域共享的是相同的图像数据.因为定义ROI区域是并不复制数据,无论ROI区域的大小,它在一个固定的时间被执行.
如果希望对图像的一些行定义ROI,可以使用如下语句:
- cv::Mat imageROI= image.rowRange(start,end) ;
cv::Mat imageROI= image.rowRange(start,end) ;
像素的,如果需要对一些列进行定义:
- cv::Mat imageROI= image.colRange(start,end) ;
cv::Mat imageROI= image.colRange(start,end) ;
对于只定义行或者列的ROI来说,使用在Scanning an image with neighbor 节被用来访问数据中提到的row和clo方法 .与使用start和end位置的方法是等价的.
- opencv学习-定义感兴趣区域
- opencv学习之感兴趣区域(ROI)
- opencv--学习之感兴趣区域(ROI)
- ROI感兴趣区域opencv初级变换学习
- 定义感兴趣区域ROI
- 感兴趣区域的定义
- Opencv感兴趣区域-ROI
- opencv取消感兴趣区域
- (转载)opencv定义感兴趣区域,两幅…
- 【OpenCV学习笔记】【函数学习】十九(感兴趣区域)
- 学习openCV之读取图像和感兴趣区域融合
- 学习《opencv中感兴趣区域以及mask的使用》
- [OpenCV2]定义感兴趣的区域
- opencv获取感兴趣区域函数
- opencv 感兴趣区域建立ROI
- opencv 提取感兴趣区域 (新版方法)
- OpenCV之感兴趣区域(ROI)
- OpenCV中关于感兴趣的区域ROI
- 乌龟 中华草龟认知
- CDC::RealizePalette
- 设计模式--创建型-抽象工厂
- php://input 和 $_POST的区别
- eclipse及ant的结合使用【转载】
- opencv学习-定义感兴趣区域
- Oracle Database 11g R2 性能调整与优化
- linux添加ssh用户
- 利用jsoup爬虫优酷、土豆等视频网站rss利用solr创建索引
- 惠普明年初将在英国裁员千人
- java链接SQL server 2005相关操作程序
- sql server T-Sql操作Xml 和 数据生成xml
- Linux用户空间与内核空间
- Extjs4中tree组件子节点和父节点的级联操作