Windows 7 x64,VS2010 / MFC + OpenCV 2.4.1打開圖片顯示到Picture控件中。html
OpenCV 2.二、OpenCV 2.3一樣適用。ide
工具/原料函數
WinXP / Win7 x86 / x64工具
OpenCV 2.2 / 2.3 / 2.4ui
Visual Studio 2010code
因Opencv2.2之後的版本就取消了CvvImage這個類,而顯示圖片到MFC的Picture控件須要用到這個類,因此須要準備CvvImage.h和CvvImage.cpp文件(從之前版本的源碼中得到),下載地址:htm
http://dl.dbank.com/c04u6b8sxe事件
方法/步驟圖片
1、新建項目ip
菜單,文件 - 新建 - 項目
Visual C++,MFC應用程序,名稱爲MFC_DEMO
下一步
基於對話框,不使用Unicode庫,在靜態庫中使用MFC,完成
出現以下界面
2、配置OpenCV環境
若是是初次配置OpenCV環境,須要在環境變量中增長如下路徑(右擊計算機,屬性,打開控制面板,點擊左側高級系統設置,環境變量)
在系統變量的PATH中添加
;D:\Program Files\opencv\build\x86\vc10\bin
注意是添加,原有項目千萬不要刪掉,每項之間以英文狀態下的分號隔開
新建OPENCV項,其值爲 D:\Program Files\opencv\build
其中本例中D:\Program Files\opencv爲OpenCV安裝目錄,根據你安裝的狀況自行修改。後文相同,再也不復述。
菜單,視圖,屬性管理器
雙擊工程名稱,打開屬性頁
選擇配置目錄,VC++目錄,包含目錄,點擊右側下拉箭頭,編輯
點擊右上角圖標添加文件夾
「包含目錄」中添加
D:\Program Files\opencv\build\include
D:\Program Files\opencv\build\include\opencv
D:\Program Files\opencv\build\include\opencv2
一樣,在「包含目錄」下方的「庫目錄」中添加
D:\Program Files\opencv\build\x86\vc10\lib
連接器,輸入,附加依賴項,編輯
此處添加
opencv_core241d.lib
opencv_highgui241d.lib
opencv_video241d.lib
opencv_ml241d.lib
opencv_legacy241d.lib
opencv_imgproc241d.lib
若是你的OpenCV版本不是2.4.1,只需將文件名稱後綴中的241修改成對應版本,具體可打開D:\Program Files\opencv\build\x86\vc10\lib(即前面添加的庫目錄)查看所需文件是否存在。
在屬性頁左上角配置中選擇Release
彈出保存對話框,則選是
一樣,在Release頁面附加依賴性中增長
opencv_core241.lib
opencv_highgui241.lib
opencv_video241.lib
opencv_ml241.lib
opencv_legacy241.lib
opencv_imgproc241.lib
文件名與前面相比,少了後綴"d"
點擊肯定,至此OpenCV環境已配置完成
3、添加和設置控件
菜單,視圖,工具箱,打開工具箱
選中Button控件
將Button從工具箱向窗體拖動,添加按鈕
同理,添加Picture Control控件
右擊Picture控件,屬性,打開控件屬性窗口,其ID爲IDC_STATIC,修改Type爲Rectangle
將Picture控件大小調整合適,如圖
右擊添加的按鈕,屬性
可將Caption改成OpenImg
右擊按鈕,添加事件處理程序
選擇BN_CLICKED,類列表爲CMFC_DEMODlg,函數名爲OnBnClickedOpenImg,添加編輯
4、添加OpenCV的CvvImage文件
右擊解決資源方案管理器中的頭文件,添加,現有項,選擇CvvImage.h
一樣,源文件中添加CvvImage.cpp
5、添加代碼
在類視圖或解決方案管理器中雙擊打開MFC_DEMODlg.h
添加代碼
#include "cv.h"
#include "highgui.h"
#include "E:\\CvvImage.h"
其中CvvImage.h若不在工程的包含目錄中,則要有完整路徑,「\」須要寫成「\\」,如E:\\CvvImage。
在MFC_DEMODlg.h文件中CMFC_DEMODlg類的聲明中添加函數DrawPicToHDC()的聲明
void DrawPicToHDC(IplImage *img, UINT ID);
在MFC_DEMODlg.cpp文件中添加函數
void CMFC_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 );
}
在新增按鈕的響應函數中添加代碼爲以下
void CMFC_DEMODlg::OnBnClickedOpenImg()
{
// TODO: 在此添加控件通知處理程序代碼
IplImage *image=NULL; //原始圖像
if(image) cvReleaseImage(&image);
image = cvLoadImage("D:\\demo.jpg",1); //顯示圖片
DrawPicToHDC(image, IDC_ShowImg);
}
其中,D:\\demo.jpg爲預先存儲到D:\demo.jpg的已有圖片文件,IDC_STATIC爲Picture控件的ID號
6、編譯運行
點擊菜單下方工具欄中的綠色向右箭頭便可編譯生成程序
?點擊OpenImg按鈕便可打開D:\demo.jpg並顯示在Picture控件上