天天看點

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