利用CvRect和CvSetImageROI从指定图片中指定位置抠图,并把图片显示在界面中或者保存在本地。
IplImage* img = cvLoadImage("D:\\Demo.jpg");//加载一张图片到内存
IplImage* imgtemp = NULL;
//标注img图片中,cvRect(0,0,100,100)区域为感兴趣区域
//在调用cvResetImageROI(img)语句之前,对img的一切操作都是
//只针对标记区域的操作。
cvSetImageROI(img,cvRect(0,0,100,100));
//创建一个图片用于保存抠出来的图片,因为CvCopy()函数要求
//两图片大大小和类型一样所以这里用cvGetSize(img)。
imgtemp = cvCreateImage(cvGetSize(img),8,3);
cvCopy(img,imgtemp);
cvResetImageROI(img);
//把图片显示到MFC对话框中ID为IDC_STATIC的控件上。
//后面会附上DrawPicToHDC的具体实现。
DrawPicToHDC(imgtemp,IDC_STATIC);
//保存抠出来的图片
cvSaveImage("D:\\Demo2.jpg",img)
把imgtemp显示到单独的界面中。
cvNamedWindow( "donkeyaime", CV_WINDOW_AUTOSIZE );
cvShowImage( "donkeyaime", imgtemp );
cvWaitKey(0);
cvReleaseImage( &img );
DrawPicToHDC的具体实现。
void ClassName::DrawPicToHDC(IplImage *img,UINT ID)
{
CDC *pDC = GetDlgItem(ID)->GetDC();
HDC hDC = pDC->GetSafeHdc();
CRect rect ;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage cimg ;
cimg.CopyOf(img);
cimg.DrawToHDC(hDC,&rect);
ReleaseDC(pDC);
}