VS2010 / MFC OpenCV 2.4.1開啟圖片

VS2010 / MFC   OpenCV 2.4.1開啟圖片
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

Windows 7 x64,VS2010 / MFC OpenCV 2.4.1開啟圖片顯示到Picture控制元件中。

OpenCV 2.2、OpenCV 2.3同樣適用。

工具/原料

WinXP / Win7 x86 / x64

OpenCV 2.2 / 2.3 / 2.4

Visual Studio 2010

因Opencv2.2以後的版本就取消了CvvImage這個類,而顯示圖片到MFC的Picture控制元件需要用到這個類,所以需要準備CvvImage.h和CvvImage.cpp檔案(從以前版本的原始碼中獲得),下載地址:

http://dl.dbank.com/c04u6b8sxe

方法/步驟

 

一、新建專案

選單,檔案 – 新建 – 專案

clip_image001

Visual C ,MFC應用程式,名稱為MFC_DEMO

clip_image002

下一步

clip_image003

基於對話方塊,不使用Unicode庫,在靜態庫中使用MFC,完成

clip_image004

出現如下介面

clip_image005

二、配置OpenCV環境

如果是初次配置OpenCV環境,需要在環境變數中增加以下路徑(右擊計算機,屬性,開啟控制面板,點選左側高階系統設定,環境變數)

在系統變數的PATH中新增

;D:\Program Files\opencv\build\x86\vc10\bin

注意是新增,原有專案千萬不要刪掉,每項之間以英文狀態下的分號隔開

新建OPENCV項,其值為 D:\Program Files\opencv\build

其中本例中D:\Program Files\opencv為OpenCV安裝目錄,根據你安裝的情況自行修改。後文相同,不再複述。

選單,檢視,屬性管理器

clip_image006

雙擊工程名稱,開啟屬性頁

clip_image007

選擇配置目錄,VC 目錄,包含目錄,點選右側下拉箭頭,編輯

clip_image008

點選右上角圖示新增資料夾

clip_image009

“包含目錄”中新增

D:\Program Files\opencv\build\include

D:\Program Files\opencv\build\include\opencv

D:\Program Files\opencv\build\include\opencv2

clip_image010

同樣,在“包含目錄”下方的“庫目錄”中新增

D:\Program Files\opencv\build\x86\vc10\lib

連結器,輸入,附加依賴項,編輯

clip_image011

此處新增

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(即前面新增的庫目錄)檢視所需檔案是否存在。

clip_image012

在屬性頁左上角配置中選擇Release

clip_image013

彈出儲存對話方塊,則選是

clip_image014

同樣,在Release頁面附加依賴性中增加

opencv_core241.lib

opencv_highgui241.lib

opencv_video241.lib

opencv_ml241.lib

opencv_legacy241.lib

opencv_imgproc241.lib

檔名與前面相比,少了字尾”d”

點選確定,至此OpenCV環境已配置完成

三、新增和設定控制元件

選單,檢視,工具箱,開啟工具箱

clip_image015

選中Button控制元件

clip_image016

將Button從工具箱向窗體拖動,新增按鈕

clip_image017

同理,新增Picture Control控制元件

clip_image018

右擊Picture控制元件,屬性,開啟控制元件屬性視窗,其ID為IDC_STATIC,修改Type為Rectangle

clip_image019

將Picture控制元件大小調整合適,如圖

clip_image020

右擊新增的按鈕,屬性

clip_image021

可將Caption改為OpenImg

clip_image022

右擊按鈕,新增事件處理程式

clip_image023

選擇BN_CLICKED,類列表為CMFC_DEMODlg,函式名為OnBnClickedOpenImg,新增編輯

clip_image024

四、新增OpenCV的CvvImage檔案

右擊解決資源方案管理器中的標頭檔案,新增,現有項,選擇CvvImage.h

clip_image025

同樣,原始檔中新增CvvImage.cpp

clip_image026

五、新增程式碼

在類檢視或解決方案管理器中雙擊開啟MFC_DEMODlg.h

clip_image027

新增程式碼

#include “cv.h”  
#include “highgui.h”    
#include “E:\\CvvImage.h”

其中CvvImage.h若不在工程的包含目錄中,則要有完整路徑,“\”需要寫成“\\”,如E:\\CvvImage。

clip_image028

在MFC_DEMODlg.h檔案中CMFC_DEMODlg類的宣告中新增函式DrawPicToHDC()的宣告

void DrawPicToHDC(IplImage *img, UINT ID);

clip_image029

在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號

clip_image030

六、編譯執行

點選選單下方工具欄中的綠色向右箭頭即可編譯生成程式

clip_image031

?點選OpenImg按鈕即可開啟D:\demo.jpg並顯示在Picture控制元件上

clip_image032

 


(adsbygoogle = window.adsbygoogle || []).push({});

function googleAdJSAtOnload() {
var element = document.createElement(“script”);
element.src = “//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”;
element.async = true;
document.body.appendChild(element);
}
if (window.addEventListener) {
window.addEventListener(“load”, googleAdJSAtOnload, false);
} else if (window.attachEvent) {
window.attachEvent(“onload”, googleAdJSAtOnload);
} else {
window.onload = googleAdJSAtOnload;
}

人工智慧 最新文章