[zt] ROI (Region of Interest) 感兴趣区域 OpenCV
在以前介绍IplImage结构的时候,有一个重要的参数——ROI。ROI全称是”Region Of Interest”,即感兴趣的区域。实际上,它是IPL/IPP(这两个是Inter的库)结构IplROI的实例。IplROI包含xOffset、yOffset、height、width和coi成员变量。其中COI代表channel of interest(感兴趣的通道)。ROI的思想是:一旦设定ROI,通常组用于整幅图像的函数便只会对ROI所表示的子图像进行操作。如果COI被设置非0值,则对该图像的操作就只作用于被指定的通道上了。这个COI变量可取的值是1、2、3、4通道,并且为了使COI无效而保留了0取值(有点像忽略)。但是,许多OpenCV函数都忽略参数COI。
ROI在实际工作中有很重要的作用,在许多情况下,使用它会提高计算机视觉代码的执行速度。这是因为他们允许对图像的某一部分进行操作,而不是对整个图像进行操作。在OpenCV中,普遍支持ROI,函数的操作被限于感兴趣的区域。要设置或取消ROI,就要使用 cvSetImageROI( )和cvResetImageROI( )函数。如果设置ROI,可以使用函数 cvSetImageROI( ),并为其传递一个图像指针和矩形。要取消ROI,只需要为函数 cvResetImageROI( )传递一个图像指针。
|
1
2
|
void cvSetImageROI(IplImage* image, CvRect rect);
void cvResetImageROI(IplImage* image);
|
下面用一个例子来来说明ROI的用法。例子中:我们加载一幅图像并修改一些区域——设置ROI的x,y,width和height的值,最后将ROI区域中像素都加上一个整数。代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
IplImage *src;
src = cvLoadImage("E:\OpenCV\images\cat.jpg");
int x = 90;
int y = 110;
int width = 180;
int height = 180;
int add = 150;
cvSetImageROI(src, cvRect(x, y, width, height));
cvAddS(src, cvScalar(add), src);
cvResetImageROI(src);
cvNamedWindow("Roi_Add", 1);
cvShowImage("Roi_Add", src);
cvWaitKey();
return 0;
}
|
上述代码把ROI集中于猫的脸部,并将其蓝色通道增加150。最终效果如图:

最后有两点需要说明:
1. cvAddS( )函数,该函数用于实现一个数组和一个标量的元素级的相加运算。例子中通过cvScalar( )构造函数将CvScalar的第一个分量设置为add代表的值,其他值为默认值0,然后和src里面的元素相加。那为什么是蓝色通道增加150,而不是红色通道呢?因为RGB图在内存中的排列顺序是:BGRA BGRA BGRA …。所以,实际上第一个通道是B(blue)。该函数其实还有第四个参数(默认为NULL),其代表的含义可参考OpenCV文档。
2. 显示图像之前的” cvResetImageROI(src); ”这一句代码千万不能少。如果没有这行代码,那接下去显示图像的时候,只会显示ROI区域。因为前面已经说过,设置了ROI区域后,OpenCV的函数只会对ROI区域有效。注释掉那一句后的程序运行结果如下所示:

[zt] ROI (Region of Interest) 感兴趣区域 OpenCV的更多相关文章
- 例3-12opencv设置ROI感兴趣区域
前面说了一堆,也不知道啥用,感觉也没说清楚,可能确实需要一些例子来显性表示一下,或者他们在当初出版书籍针对的人群已经有了对图像的基本认识,然而自己还是没有建立起来,往后看看吧,希望能比较清楚的自己处理 ...
- opencv探索之路(十二):感兴趣区域ROI和logo添加技术
在图像处理领域,有一个非常重要的名词ROI. 什么是ROI? 它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域. 感兴趣区域,就是我们从图像中选择一个图像区域,这个区域 ...
- opencv——感兴趣区域(ROI)的分析和选取[详细总结]
引言 在利用OpenCV对图像进行处理时,通常会遇到一个情况,就是只需要对部分感兴趣区域进行处理.因此,如何选取感兴趣区域呢?(其实就是"抠图"). 在学习opencv的掩码运算后 ...
- opencv —— copyTo 设置与操作感兴趣区域(ROI)
感兴趣区域:ROI 对感兴趣区域进行的一系列操作,相当于直接在原图相应部分进行操作. Mat imageROI = srcImage(Rect(0,0,dstImage.cols, dstImage. ...
- 获取图片中感兴趣区域的信息(Matlab实现)
内容提要 如果一幅图中只有一小部分图像你感兴趣(你想研究的部分),那么截图工具就可以了,但是如果你想知道这个区域在原图像中的坐标位置呢? 这可是截图工具所办不到的,前段时间我就需要这个功能,于是将其用 ...
- OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道
11 绘制直线的line函数 DrawLine(Mat img, Pont start, Point end); 绘制椭圆的ellipse函数 DrawEllipse(Mat img, dou ...
- opencv感兴趣区域ROI
addWeighted //显示原图 Mat src = imread("data/img/1.jpg"); imshow("src",src); //显示lo ...
- opencv读写视频,对感兴趣区域进行裁剪
作为小码农,本人最近想对一段视频的某个区域进行处理,因此要将该段视频区域裁剪出来,搜搜网上,发现没有痕迹,是故自己琢磨一下,左右借鉴,编了如下代码,目标得以实现,希望对你有用. #include &q ...
- 基于OpenCV实现对图片及视频中感兴趣区域颜色识别
基于OpenCV实现图片及视频中选定区域颜色识别 近期,需要实现检测摄像头中指定坐标区域内的主体颜色,通过查阅大量相关的内容,最终实现代码及效果如下,具体的实现步骤在代码中都详细注释,代码还可以进一步 ...
随机推荐
- WPF线程(Step2)——BackgroundWorker
在WPF中第二个常用的线程处理方式就是BackgroundWorker. 以下是BackgroundWorker一个简单的例子. public partial class MainWindow : W ...
- xcode6 下 ios simulator 有 Home 键么?
4s之前 ,现在,只能用command+shift+h来代替
- 非正规写法获取不到tr,td
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...
- c++ shared_ptr 使用注意事项. 1
条款1:不要把一个原生指针给多个shared_ptr管理 int* ptr = new int; shared_ptr<int> p1(ptr); shared_ptr<int> ...
- CentOS升级Python 2.6到2.7
查看python的版本 python -V Python 2.6.6 下载Python Python-2.7.8.tar.xz 链接:http://pan.baidu.com/s/1i4 ...
- caffe中添加local层
下载caffe-local,解压缩; 修改makefile.config:我是将cuudn注释掉,去掉cpu_only的注释; make all make test(其中local_test出错,将文 ...
- Java常用命令
jps 查看java进程的PID java -XX:+PrintFlagsInitial 显示所有可设置参数及默认值 java -XX:+PrintFlagsFinal 获取到所有可 ...
- Python Web 开发的十个框架【转载】
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- 原生Ajax写法(GET)
ajax的GET提交方式的原生代码: var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else if(w ...