一直使用的是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