一直使用的是OpenCV C++的接口,但是有些只能用纯c的环境下,就不得不用c接口了,IplImage是c接口图像数据最基本的数据结构,获取其ROI区域的过程如下,首先通过cvSetImageROI(IplImage* src, CvRect rect)设定ROI区域,然后将给部分图像数据拷贝出来,最后通过cvResetImageROI(IplImage* src)重置ROI区域即可。
这里为了使用方便,封装了一下:
IplImage* get_ipl_roi(IplImage* src, CvRect rect)
{
cvSetImageROI(src, rect);
IplImage* tmp = cvCreateImage(cvSize(src->roi->width, src->roi->height), src->depth, src->nChannels);
cvCopy(src, tmp, NULL);
cvResetImageROI(src);
return tmp;
}
测试代码如下:
int main()
{
IplImage *src = cvLoadImage("Hepburn.png", 0);
CvRect rect = cvRect(60, 60, 130, 130);
IplImage *roi = get_ipl_roi(src, rect);
cvNamedWindow("ROI", CV_WINDOW_AUTOSIZE);
cvShowImage("ROI", roi);
cvWaitKey(0);
cvReleaseImage(&roi);
cvDestroyWindow("ROI");
}
结果如下:
原始图像
ROI