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