Opencv step by step - ROI


什么是ROI?ROI就是region of interest ,就是你感兴趣的图像部分,在图像处理中,可能同时要处理多个ROI。



Opencv有ROI的API,但是只能同时处理一个(书本上说的,未验证)。


下面给出一个实例:


#include <cv.h>
#include <highgui.h>

int main(int argc,char **argv)
{

/*
 * 	CVAPI(IplImage*) cvLoadImage( const char* filename,
		int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));


	//dst(mask) = src(mask) + value 
	CVAPI(void)  cvAddS( const CvArr* src, CvScalar value, CvArr* dst,
                     const CvArr* mask CV_DEFAULT(NULL));


 */
	IplImage *src = cvLoadImage(argv[1],1);


	cvNamedWindow("image input");
	cvNamedWindow("image output");
	cvShowImage("image input", src);	


	cvSetImageROI(src,cvRect(100,100,100,100));
	cvAddS(src, cvScalar(100), src);
	cvResetImageROI(src);
	cvShowImage("image output", src);

	cvWaitKey();

	cvReleaseImage(&src);
	cvDestroyWindow("image input");
	cvDestroyWindow("image output");

	return 0;
}

关键函数是    cvSetImageROI(src,cvRect(100,100,100,100));


这里在100,100像素点开始,设置了100,100的大小作为ROI。

效果如下:


可以看到右边出现了一个较蓝色的块。

cvAddS(src, cvScalar(100), src); 就是起的这个作用。

为什么是蓝色的呢?


让我们将cvAddS(src, cvScalar(100), src);换成这一行试试看:

	cvAddS(src, CV_RGB(100,0,0), src);


蛤蛤,变红色了,再看一下它的定义:

#define CV_RGB(r,g,b) cvScalar((b),(g),(r),0)。


这样就明白了吧。只有蓝色的原因是只设置到了b=100,g和r都是0。.


还有一个重要的一点,一定要使用cvResetImageROI,不然图像一直会在这个牢笼中无法自拔,变成这个样子:




上面提到:

Opencv有ROI的API,但是只能同时处理一个


如果要批量处理的话,还是建议使用手动的方法吧(直接操作像素,你懂的)。

posted @ 2014-11-01 19:53  crazy_thb  阅读(319)  评论(0编辑  收藏  举报