OpenCV学习记录(一) cvSetImageROI函数用法
使用OpenCV有一段时间了,以后也将学习到的函数记录下来。
查找到一种有用的设置ROI的函数cvSetImageROI,目前只找到了OpenCV C版本的函数。貌似C++版本没有这个函数了。
一,cvSetImageROI
功能
基于给定的矩形设置图像的ROI(感兴趣区域,region of interesting)
格式
void cvSetImageROI(IplImage* image,CvRect rect);
image 图像头,待处理图像
rect ROI 矩形
说明
执行cvSetImageROI()之后显示image图像是只显示ROI标识的一部分,即改变了指针image,但是它仍旧保留有原来图像的信息,在执行这一句cvResetImageROI(image);之后,image指示原来的图像信息。
二,代码例子
int main()
{
IplImage* src = cvLoadImage("143090.png");
IplImage* src_sub;
IplImage* src_resize;
src_resize = cvCreateImage(cvSize( PROCESS_WIDTH, PROCESS_HEIGHT ), IPL_DEPTH_8U, 3);
CvRect rect1(50,50,200,200);
cvSetImageROI(src,rect1);
src_sub = src; //浅拷贝
cvResize(src, src_resize, CV_INTER_NN); //对图像进行缩放
printf("src->width %d\n",src->width);
printf("src->height %d\n",src->height);
printf("src_resize->width %d\n",src_resize->width);
printf("src_resize->height %d\n",src_resize->height);
cvShowImage("src_ROI",src);
cvShowImage("src_sub_ROI",src_sub);
cvShowImage("src_resize",src_resize);
cvResetImageROI(src);
cvShowImage("Origin src",src);
waitKey(0);
}
可以看到,执行了cvSetImageROI函数之后,其中的长宽仍然没变(仍是是原始图像的长宽)。但是从imshow和cvResize函数结果来看,src_sub函数确实是src的ROI部分。
程序执行结果如图