OpenCV入門:在MFC中使用Picture控件加載任意圖片


 OpenCV入門:在MFC中使用Picture控件加載任意圖片

 

  對於剛剛接觸OpenCV的童鞋來說,如何在MFC中加載並顯示一張圖片、應該是初期必定會碰到的問題之一。因此本文在分享這方面經驗的同時,也相當於是寫給自己的一份備忘錄。

  本文使用的是OpenCV2.1+VS2008(當然,就本文所述內容而言,支持所有版本OpencCV),至於opencv在VS中的配置方法,本文不作詳述。

  開門見山,本文核心思路是:使用OpenCV的庫函數加載圖片,並調用ShowImage()函數將其顯示到Picture控件上。

  操作步驟如下:

  1. 新建一個基於對話框的MFC程序(姑且命名為myImage),並添加一個Picture控件到對話框中,修改ID號為:IDC_STATIC_PIC。為使Picture控件更美觀,可將其屬性設置為:Client Edge:True。

  2. 添加按鈕,可命名為“加載圖像”,修改ID號為ID_BUTTON_IMG。雙擊按鈕,跳到myImageDlg.cpp文件,開始編輯按鈕消息響應函數。該按鈕功能為加載圖片並顯示到Picture控件上。

  void CmyPointerRecognitionDlg::OnBnClickedButtonDetect()

  {
   // TODO: Add your control notification handler code here 

  CString m_strPicPath;

  IplImage* TheImage;

  CFileDialog dlg(true,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
            _T("image file(*.bmp;*.jpg)|*.bmp;*.jpg|All Files(*.*)|*.*|"),NULL);  //彈出選擇圖片對話框
  dlg.m_ofn.lpstrTitle=_T("open Image");
   if(dlg.DoModal()!=IDOK)
      return ;
   m_strPicPath = dlg.GetPathName();
   m_strPicPath.Replace(_T("//"),_T("////"));
   TheImage=cvLoadImage((CT2CA)m_strPicPath,1);
   if(TheImage!=NULL)
   {
      ShowImage(TheImage, IDC_STATIC_PIC);
     }

  }

  3. 注意在myImage.cpp和myImage.h中添加頭文件:#include<cv.h>和#include<highgui.h> 為方便編程最好加上:using namespace cv;

  4. 在解決方案的類視圖(Class View)中右鍵單擊CmyImageDlg類,選擇“添加”->“添加成員函數”,在彈出的對話框中輸入相應內容 函數類型:void,函數名:ShowImage ,成員變量:IplImage* img 和 UINT ID。點擊“完成”,開始編輯函數體:

  void CmyImageDlg::ShowImage(IplImage* img, UINT ID)
  {

  CDC* pDC=GetDlgItem(ID)->GetDC();
   HDC hDC=pDC->GetSafeHdc();
   CRect rect;
   GetDlgItem(ID)->GetClientRect(&rect);
   SetRect(rect,rect.left,rect.top,rect.right,rect.bottom);
   CvvImage cimg;
   cimg.CopyOf(img);
   cimg.DrawToHDC(hDC,&rect);
   ReleaseDC(pDC);
  

  }

  5. Ctrl+F5,編譯運行,即可實現預期效果。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM