vs2010 + opencv用自定義工具打開圖片並顯示

步驟

一、新建項目

       單擊菜單欄的文件->新建->項目

            選擇Visual C++,MFC應用程序,名稱爲CSDN_demo,選擇好路徑,然後單擊“確定”


          再單擊“下一步”。此時,按照下圖來選擇各個項。

          選擇“基於對話框”、不使用Unicode庫,選擇“在靜態庫中使用MFC”,單擊“完成”。


           完成後,會出現一個編輯對話框的界面。

二、配置OpenCV環境

               由於本人之前配置過環境,而且過程繁瑣,因此,這裏就不再重複。詳細過程參考:http://blog.csdn.net/liuqinglong110/article/details/30051219

       (當然有些人的做法是:在項目屬性中加載lib文件:菜單 項目->屬性-> 配置屬性-> 鏈接器–>輸入-> 附加依賴庫中加入 cxcore200.lib  cv200.lib highgui200.lib這三個庫。           然後在 mymfc.h 的 #include "resource.h" 下加入如下代碼:#include “cv.h”   #include “highgui.h”。注意:用英文分號隔開。這種方法的有效性,本人並沒有親自驗證過。         轉自:http://blog.csdn.net/aaahuanian/article/details/8027210

三、添加和設置控件

         在菜單欄中,視圖->工具箱,此時就打開了控件的工具箱。選擇工具箱中的Button控件,並將其拖到對話框相應的位置。


          右擊Button控件,選擇屬性,將其Caption改爲OpenImg。

           添加Picture Control控件到對話框的相應位置,並調整控件的大小。


          右擊Picture Control控件,選擇屬性,打開控件屬性對話框,如下圖,保持ID屬性不變,修改Type屬性爲Rectangle。

          現在爲按鈕添加處理程序,右擊OpenImg按鈕,選擇“添加事件處理程序”,此時出現嚮導界面。消息類型選擇BN_CLICKED,類列表選擇CCSDN_deomDlg,函數處理             程序名選擇OnBnClickedOpenImg,單擊“添加編輯”。

四、添加OpenCV舊版本中的CvvImage.h和CvvImage.cpp文件

           如首先添加CvvImage.h,則右擊解決資源方案管理器中的“頭文件”-> “添加”->” CvvImage.h”


           然後再用類似的方式,在“源文件”的文件夾下添加“CvvImage.cpp”。

          注意:CvvImage.h和CvvImage.cpp這兩個文件要和本項目中的其他cpp文件等放在同一個文件夾中。

五、添加代碼

         在解決方案管理器中雙擊打開CSDN_demoDlg.h.

        在#pragma once的下一行添加如下代碼:

        #include "cv.h"
        #include "highgui.h"
       #include "CvvImage.h"

注意:若"CvvImage.h"不在工程的包含目錄中,則需要寫成完整路徑,並且“\”要寫成“\\”,如:F:\\CvvImage。建議還是放在工程的包含目錄中,這樣使用相對路徑可以避免一些不必要的麻煩。(這三行代碼應該)

 

在CSDN_demoDlg.h文件中CSDN_demoDlg類的聲明中添加函數DrawPicToHDC()的聲明:void DrawPicToHDC(IplImage *img, UINT ID);。

(其實這個函數名DrawPicToHDC()不是固定的,只要函數聲明和定義的名稱一致就可以了。)

        在CSDN_demoDlg.cpp中添加DrawPicToHDC()的函數定義:

void CCSDN_demoDlg::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 );
}

在按鈕OpenImg的響應函數中添加代碼:

void CCSDN_demoDlg::OnBnClickedOpenImg()
{ IplImage *image=NULL; //原始圖片
if(image) cvReleaseImage(&image);
CFileDialog dlg(
                   TRUE,_T("*.bmp"), NULL,
                   OFN_FILEMUSTEXIST| OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,
                   _T("imagefiles (*.bmp; *.jpg) |*.bmp; *.jpg; *.jpeg | All Files (*.*) |*.*||"),NULL
                   );                                                                                 //選項圖片的約定。
         dlg.m_ofn.lpstrTitle= _T("打開圖片");  //打開文件對話框的標題嗎
         if(dlg.DoModal() != IDOK )                                            //判斷是否獲得圖片
                   return;
         CStringmPath = dlg.GetPathName();                        //獲取圖片路徑
         IplImage*ipl = cvLoadImage( mPath, 1 );       //讀取圖片、緩存到一個局部變量ipl中
         if(!ipl )                                                                                //判斷是否成功讀取圖片
                   return;
         ShowImage(ipl,IDC_STATIC);                    // 調用顯示圖片函數
         cvReleaseImage(&ipl );                                                 //釋放ipl佔用的內存
 }


六、運行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章