OpenCV+MFC 打开文件并显示在picture控件上

在校学生刚刚接触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 }
View Code

(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 }
View Code

(4)再运行一下就可以了。

再来一张效果图

 

 

 

posted @ 2018-03-10 15:36  lincoln_lu  阅读(2028)  评论(0编辑  收藏  举报