在校学生刚刚接触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)再运行一下就可以了。
再来一张效果图