OpenCVchm文档中对cvSetImageROI函数的介绍:
void cvSetImageROI( IplImage* image, CvRect rect );
image 图像.
rect ROI 矩形.
函数 cvSetImageROI 基于给定的矩形设置图像的 ROI(感兴趣区域) . 如果ROI是NULL 并且参数RECT的值不等于整个图像, ROI被分配. 不像 COI, 大多数的 OpenCV 函数支持 ROI 并且处理它就像它是一个分离的图像 (例如, 所有的像素坐标从ROI的左上角或左下角(基于图像的结构)计算。
#include
#include
#include
void main()
{
IplImage *res,*dst;
CvRect rect;
rect.x=130,rect.y=30,rect.width=200,rect.height=200;
res=cvLoadImage("C:/Users/lufee/Pictures/cat.jpg");//载入一张图片
dst=cvCreateImage(cvSize(200,200),8,3);//创建图像空间
//创建窗口
cvNamedWindow("res",CV_WINDOW_AUTOSIZE);
cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);
//设置ROI区域
cvSetImageROI(res,rect);
//提取ROI
cvCopy(res,dst);
//取消设置
cvResetImageROI(res);
//显示图像
cvShowImage("res",res);
cvShowImage("dst",dst);
cvWaitKey(0);
cvDestroyWindow("res");
cvDestroyWindow("dst");
cvReleaseImage(&res);
cvReleaseImage(&dst);
}
使用Mat类型的一段应用
QMap::iterator it;
for(it = rects.begin();it != rects.end();it++)
{
cvSetImageROI(&image_2_temp,it.value());
//IplImage *iplimage_temp;
//iplimage_temp = cvCreateImage(cvSize(it.value().width,it.value().height),8,1);
Mat mat_temp;
mat_temp = Mat(&image_2_temp);//需要拷贝,不然存储的块内容一样
//提取ROI块
//cvCopy(&image_2_temp,iplimage_temp);
list_images.push_back((IplImage)(mat_temp));//存储裁剪块
cvResetImageROI(&image_2_temp);
}