在校學生剛剛接觸OpenCV,用OpenCV和MFC創建對話框界面,基本功能:打開文件並在picture控件上顯示所選擇的圖片。因為我的是OpenCV3.0所以要自行添加CvvImage.h和CvvImage.cpp,方法教程網上有很多,這里不多說了,主要寫一下MFC的實現代碼,方便自己做一個記錄。
(1)按要求創建完一個對話框后如圖1所示

(2)顯示圖片的按鈕響應函數
1 void CvirtualrealityDlg::OnBnClickedButtonShow() 2 { 3 CString m_strPicPath; 4 IplImage* TheImage; 5 CFileDialog dlg(true, _T("*.jpg"), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, 6 _T("image file(*.jpg)||All Files(*.*)|*.*|"), NULL); //選項圖片的約定 7 dlg.m_ofn.lpstrTitle = _T("open Image"); //打開文件對話框的標題名 8 if (dlg.DoModal() != IDOK) //判斷是否獲得圖片 9 return; 10 m_strPicPath = dlg.GetPathName(); //獲得圖片路徑 11 m_strPicPath.Replace(_T("//"), _T("////")); 12 13 TheImage = cvLoadImage((CT2CA)m_strPicPath, 1); //讀取圖片、緩存到一個局部變量the image中 14 15 if (TheImage) 16 ShowImage(TheImage, IDC_STATIC_SHOW); //調用顯示圖片函數 17 else 18 return; 19 20 21 }
(3)其中調用的顯示圖片函數ShowImage()需要在頭文件中聲明,在源文件中聲明如下
1 void CvirtualrealityDlg::ShowImage(IplImage* img, UINT ID) 2 { 3 CDC* pDC = GetDlgItem(ID)->GetDC(); //獲得顯示控件的DC 4 HDC hDC = pDC->GetSafeHdc(); //獲得HDC(設備句柄)來進行繪圖操作 5 6 CRect rect; 7 GetDlgItem(ID)->GetClientRect(&rect); 8 9 SetRect(rect, rect.left, rect.top, rect.right, rect.bottom); 10 11 CvvImage cimg; 12 cimg.CopyOf(img); //復制圖片 13 cimg.DrawToHDC(hDC, &rect); //將圖片繪制到顯示控件的指定區域內 14 ReleaseDC(pDC); 15 16 }
(4)再運行一下就可以了。
再來一張效果圖


