注意:
- 下列文檔以VC2008 Express為例,VC2010下的配置應(yīng)與本文檔類似。
- VC 6.0不被OpenCV 2.3.1支持。
- VC Express是微軟提供的免費(fèi)版,可從此處下載: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express
- 建議先不要自己編譯,如果使用預(yù)編譯好的庫(kù)有問(wèn)題,再嘗試自己編譯。
安裝所需要的軟件
下載OpenCV
- 從本站下載欄目 http://www./index.php/Download 下載 OpenCV for Windows(也即 OpenCV-2.3.1-win-superpack.exe 文件)。
- 將 OpenCV-2.3.1-win-superpack.exe 解壓并放到某個(gè)目錄下,例如
D:\Program Files\OpenCV2.3.1 (無(wú)需運(yùn)行setup.exe,解壓則可)。解壓后的目錄結(jié)構(gòu)如下圖。
安裝CMake(不打算自己編譯無(wú)需安裝)
從 http://www./cmake/resources/software.html 下載 Windows (Win32 Installer) 安裝。
編譯OpenCV(非必需步驟)
用CMake導(dǎo)出VC++項(xiàng)目文件
- 運(yùn)行cmake-gui,設(shè)置where is the source code路徑為OpenCV安裝路徑(本文檔假定安裝位置為:
D:\Program Files\OpenCV2.3.1\opencv ),并創(chuàng)建子目錄D:\Program Files\OpenCV2.3.1\opencv\build\my ,并將cmake的"where to build the binaries"設(shè)置為這個(gè)目錄。
- 然后點(diǎn) configure,在彈出的對(duì)話框內(nèi)選擇 Visual Studio 9 2008。
- 你可根據(jù)你的系統(tǒng)修改選項(xiàng),修改后再次選擇“Congfigure”,完成后選擇“Generate”。
(注: 此處Open CV文件放的目錄不能包含漢字,否則“Congfigure”和“Generate”無(wú)法成功;同時(shí)需要關(guān)閉已經(jīng)打開(kāi)的VS,否則CMake與VS的宏無(wú)法配置。 by:Jackyzzy 趙振陽(yáng))
編譯 OpenCV Debug和Release版本庫(kù)
完成上一步驟后,將在D:\Program Files\OpenCV2.3.1\opencv\build\my目錄下生成OpenCV.sln的VC Solution File,請(qǐng)用VC++ 2008 Express打開(kāi)OpenCV.sln,然后執(zhí)行如下操作:
- 在Debug下,選擇Solution Explorer(解決方案資源管理器)里的 Solution OpenCV(解決方案“OpenCV”),點(diǎn)右鍵,運(yùn)行"Rebuild Solution";如編譯無(wú)錯(cuò)誤,再選擇INSTALL項(xiàng)目,運(yùn)行"Build"。
- 在Release下,選擇Solution Explorer里的 Solution OpenCV,點(diǎn)右鍵,運(yùn)行"Rebuild Solution";如編譯無(wú)錯(cuò)誤,再選擇INSTALL項(xiàng)目,運(yùn)行"Build"。
全部運(yùn)行完畢后,針對(duì)你的系統(tǒng)的OpenCV庫(kù)就生成了。
配置VC
配置include路徑
也即告訴VC去什么地方尋找OpenCV的頭文件,打開(kāi)VC,選擇菜單“工具”->“選項(xiàng)”->“項(xiàng)目和解決方案”->“VC++目錄”->“包含文件”,包含 D:\Program Files\OpenCV2.3.1\opencv\build\include;D:\Program Files\OpenCV2.3.1\opencv\build\include\opencv;D:\Program Files\OpenCV2.3.1\opencv\build\include\opencv2 如果是自己編譯的則輸入D:\Program Files\OpenCV2.3.1\opencv\build\my\install\include
配置lib路徑
也即告訴VC去什么地方尋找OpenCV的庫(kù)文件。
在剛才下載的文件OpenCV-2.3.1-win-superpack.exe 里,已經(jīng)為VC2008和VC2010預(yù)先編譯好了動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)。因此我們不需要如早先版本那樣,自己用cmake編譯OpenCV。
- 自己編譯的庫(kù),庫(kù)目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\my\install\lib
(注:由于自己編譯成功,lib文件在Debug和Release兩個(gè)文件中,加載庫(kù)時(shí)需到Debug和Release中,
我配置的庫(kù)目錄為:D:\Program Files\OpenCV2.3.1\opencv\build\my\install\lib\Debug,否則調(diào)試時(shí)無(wú)法進(jìn)入Open CV代碼中。 by:Jackyzzy 趙振陽(yáng))
- 32位系統(tǒng) & VC2008,庫(kù)目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x86\vc9\lib
- 32位系統(tǒng) & VC2010,庫(kù)目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x86\vc10\lib
- 64位系統(tǒng) & VC2008,庫(kù)目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x64\vc9\lib
- 64位系統(tǒng) & VC2010,庫(kù)目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x64\vc10\lib
請(qǐng)根據(jù)自己的情況四選一,將庫(kù)目錄輸入菜單“工具”->“選項(xiàng)”->“項(xiàng)目和解決方案”->“VC++目錄”->“庫(kù)文件” 。如下圖所示:
設(shè)置環(huán)境變量
剛才設(shè)置的是動(dòng)態(tài)庫(kù),因此還需要將OpenCV的dll文件所在的目錄加入Path環(huán)境變量。dll文件目錄如下,請(qǐng)根據(jù)自己情況五選一:
- 自己編譯的庫(kù),dll目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\my\install\bin
- 32位系統(tǒng) & VC2008,dll目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x86\vc9\bin
(注:此處環(huán)境變量應(yīng)與上邊庫(kù)目錄一致,這樣能夠調(diào)試時(shí)能夠進(jìn)入代碼,我自己的目錄是:D:\Program Files\OpenCV2.3.1\opencv\build\x86\vc9\bin\Debug。 by:Jackyzzy 趙振陽(yáng))
- 32位系統(tǒng) & VC2010,dll目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x86\vc10\bin
- 64位系統(tǒng) & VC2008,dll目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x64\vc9\bin
- 64位系統(tǒng) & VC2010,dll目錄為:
D:\Program Files\OpenCV2.3.1\opencv\build\x64\vc10\bin
由于有些函數(shù)需要TBB,所以需要將tbb所在的目錄也加入到環(huán)境變量Path中。TBB相關(guān)的DLL路徑為:
- 32位系統(tǒng) & VC2008:
D:\Program Files\OpenCV2.3.1\opencv\build\common\tbb\ia32\vc9
- 32位系統(tǒng) & VC2010:
D:\Program Files\OpenCV2.3.1\opencv\build\common\tbb\ia32\vc10
- 64位系統(tǒng) & VC2008:
D:\Program Files\OpenCV2.3.1\opencv\build\common\tbb\intel64\vc9
- 64位系統(tǒng) & VC2010:
D:\Program Files\OpenCV2.3.1\opencv\build\common\tbb\intel64\vc10
如下圖所示將OpenCV和TBB的dll文件所在的目錄系統(tǒng)環(huán)境變量Path中。加入后可能需要注銷當(dāng)前Windows用戶(或重啟)后重新登陸才生效。
使用OpenCV 2.3.1編程
- 打開(kāi)VC++ 2008 Express,創(chuàng)建一個(gè)Win32控制臺(tái)程序helloopencv;
- 選擇Solution Explorer里的opencvhello項(xiàng)目,點(diǎn)擊鼠標(biāo)右鍵,選擇Properties。
- ,在[鏈接器 LINKER]的[輸入INPUT]中,為項(xiàng)目的Debug配置增加 [附加依賴項(xiàng) Additional Dependencies]:
opencv_calib3d231d.lib; opencv_contrib231d.lib; opencv_core231d.lib; opencv_features2d231d.lib; opencv_flann231d.lib; opencv_gpu231d.lib; opencv_highgui231d.lib; opencv_imgproc231d.lib; opencv_legacy231d.lib; opencv_ml231d.lib; opencv_objdetect231d.lib; opencv_ts231d.lib; opencv_video231d.lib (可根據(jù)實(shí)際需要?jiǎng)h減)注意,請(qǐng)打開(kāi)了新編輯窗口(即點(diǎn)擊了“...”按鈕)“附加依賴項(xiàng)”,并一條一條分別加入,一條一行(一個(gè)回車),(注意行末不要加";")否則會(huì)出現(xiàn)類似以下錯(cuò)誤:1>LINK : fatal error LNK1104: 無(wú)法打開(kāi)文件“…….lib”
- 如果下載的OpenCV不是2.3.1版本,請(qǐng)將"XXX231d.lib"中的"231"更改為對(duì)應(yīng)的版本號(hào),例如:下載OpenCV 2.4.0,則統(tǒng)一改為"XXX240d.lib",否則會(huì)出現(xiàn)類似以下錯(cuò)誤:1>LINK : fatal error LNK1104: 無(wú)法打開(kāi)文件“XXX.lib”
- 為項(xiàng)目的Release配置增加[附加依賴項(xiàng) Additional Dependencies]:
opencv_calib3d231.lib; opencv_contrib231.lib; opencv_core231.lib; opencv_features2d231.lib; opencv_flann231.lib; opencv_gpu231.lib; opencv_highgui231.lib; opencv_imgproc231.lib; opencv_legacy231.lib; opencv_ml231.lib; opencv_objdetect231.lib; opencv_ts231.lib; opencv_video231.lib (可根據(jù)實(shí)際需要?jiǎng)h減)*
- 編譯運(yùn)行下面的例程(需要將lena.jpg文件放在項(xiàng)目目錄下,即與生成的.exe文件同位置)(這里有誤。雙擊exe的話,圖片放在.exe同一文件夾內(nèi);按F5直接運(yùn)行程序的話,lena.jpg要放在helloopencv\helloopencv里)。
/***********************************************************************
* OpenCV 2.3.1 測(cè)試?yán)? * 于仕琪 提供
***********************************************************************/
#include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
const char* imagename = "lena.jpg";
//從文件中讀入圖像
Mat img = imread(imagename);
//如果讀入圖像失敗
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//顯示圖像
imshow("image", img);
//此函數(shù)等待按鍵,按鍵盤任意鍵就返回
waitKey();
return 0;
}
程序運(yùn)行結(jié)果圖,點(diǎn)擊看大圖
作者
|