天天看点

OpenCV图片加载,显示,抠图与保存

利用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);
}