最近用上了Opencv2.2,在這里面使用的還有些門道,於是記錄下來,供大家參考
環境:windows 7+visual studio 2010+opencv 2.1
各位進行操作時,最好把其它無關的程序均關掉,最好把殺毒軟件關掉,360也都關掉,否則會出現未知的錯誤
如果所在的環境是VS2010,那么必須要用CV2.2 ,CV2.1是針對VS2008的版本
1、下載文件
OpenCV2.2
直接下載opencv2.2 for vs2010的安裝版進行安裝(下載網址:http://www.opencv.org.cn/index.php/Download)
CMAKE 2.8.1
http://www.cmake.org/files/v2.8/cmake-2.8.1-win32-86.exe
INTELTBB3.0[/url]
http://www.threadingbuildingblocks.org/uploads/77/151/3.0/tbb30_20100406oss_win.zip
這三個部件可以在打開迅雷后直接復制下載
2、首先安裝CMAKE2.8.1,然后將OpenCV2.2安裝到你將要放置OPENCV的地方,接着,解壓INTEL TBB 3.0,比如將OPENCV和TBB都放在D:\Program Files里面。並在OpenCV文件夾下創建子目錄D:\vs2010,用於存放編譯結果。
檢查D:\Program Files\OpenCV2.2\bin和D:\Intel TBB 3.0\bin\ia32\vc10是否已經被加入到環境變量(我的電腦-屬性-環境變量)PATH,如果沒有,請加入。加入后需要注銷當前Windows用戶(或重啟)后重新登陸才生效。(可以在任務管理器里重啟explorer.exe)
打開CMAKE 2.8.1,在Where is the source code后面填寫(或者選擇)OPENCV 2.2的安裝目錄,如D:\Program Files\OpenCV2.2,在Where to build the binaries里填寫剛創建的子目錄D:\vs2010。接着點擊Configure按鈕,在出現的對話框中選擇Visual Studio 10,下面的選項選擇Use default native compilers,點擊Finish繼續。
過一會兒之后會出現一個配置窗口(此處注意在CMAKE配置的時候是不能夠打開VS2010的),然后勾選BUILD_SHARED_LIBS,BUILD_TESTS,OPENCV_BUILD_3DPARTY_LIBS,以及下面的WITH_JASPER,WITH_JPEG,WITH_PNG,WITH_TBB(一般這個沒默認選上),和WITH_TIFF選項
這是配置時出現的錯誤,稍后一會就會解決
繼續,
勾好后再次點擊Configure,之后再配置窗口最上面會出現TBB_INCLUDE_DIR-NOTFOUND字樣的紅色選項,此處為CMAKE找不到INTEL TBB的包含文件為之所致,將INTEL TBB 3.0里面的INCLUDE文件夾路徑(注意是INCLUDE,不是INCLUDE里面的子文件夾)定位到該配置屬性的路徑里(就在這一項的Value列,你點擊一下就會出現選擇文件夾的對話框),再次點擊Configure,在TBB_LIB_DIR處又會出現紅色一行,此處為INTEL TBB的庫文件位置,此處必須將路徑定位到含有LIB文件的位置(就在這一項的Value列,你點擊一下就會出現選擇文件夾的對話框,別找不到),比如我的安裝位置是D:/Program Files/Intel TBB 3.0/lib/ia32/vc10,也就是說,在lib文件夾下會有子文件夾,必須定位到子文件夾對應的VC版本文件夾里去,這里由於是配置VS2010,所以我們選擇VC10文件夾,ia32子文件夾是32位系統,此處應根據對應操作系統選擇。
然后,我們再次點擊Configure,此時所有紅色行已經變為白色,同時在下方的信息里面會有一條為Use TBB:YES的字樣,證明我們已經將INTEL TBB配置完畢,然后點擊Generate。
3、完成后在剛創建的子文件夾D:\vs2010下會出現一個VS2010的解決方案文件OPENCV.sln,雙擊打開后,出現OPENCV 2.1的所有工程項目,先不要着急編譯。
首先點擊Solution Explorer(解決方案資源管理器)里面Property Manager(屬性管理器)(在視圖--》其它窗口--》屬性管理器)下的選項卡,依次展開ALL_BUILD—Debug|Win32—右鍵單擊Microsoft.Cpp.Win32.user,選擇Properties(屬性),然后選擇VC++ Directories(VC++目錄),在Executable Directories(可執行文件目錄)里面將INTEL TBB 3.0的可執行路徑(bin)填寫到里面,此處與LIB一樣,必須定位到VC10才可以,例如我的是D:\Program Files\Intel TBB 3.0\bin\ia32\vc10,將Include Directories(包含目錄)定位到Intel TBB的Include文件夾即可,無需再往深入定位,在Library Directories(庫目錄)里填寫Intel TBB的LIB文件位置,定位到VC10文件夾。
單擊確定之后,將選項卡切回到Solution Explorer(解決方案資源管理器),將編譯模式切換為Debug模式,右鍵單擊Solution OpenCV(解決方案OpenCV),選擇Rebuild Solution(重新生成解決方案),編譯后再右鍵單擊INSTALL項目,選擇Build(生成),之后將編譯模式切換為Release,重復debug模式下的步驟。完成后在你的解決方案文件夾D:\Program Files\OpenCV2.2\vs2010里面會生成bin目錄,include目錄,lib目錄。
此時,OpenCV的*d.dll文件(for debug)和*.dll文件(for release)將出現在D:\vs2010\bin目錄中;
OpenCV的*d.lib文件(for debug)和*.lib文件(for release)將出現在D:\vc2010\lib目錄;
頭文件*.h出現在D:\vc2010\include\opencv中。
配置Opencv2.2的環境變量是一件非常麻煩的事情,需要很大耐心
配置Windows環境變量Path
將OPENCV安裝時的環境變量,以及Generate以后的VS2010\bin,VS2010\include\opencv2,forVS2010\lib 都加入Windows系統環境變量Path中。
D:\Program Files\OpenCV2.2\include
D:\Program Files\OpenCV2.2\forVS2010\bin
D:\Program Files\OpenCV2.2\forVS2010\include\opencv2
D:\Program Files\OpenCV2.2\forVS2010\lib
需要編輯的項目有三個:Excutable files directory(可執行文件目錄),Include Directory(包含文件目錄),Library Directory(庫目錄)
在可執行文件目錄中填寫的文件夾地址為:
因為我在剛開始安裝時使用的CV2.1所以浪費了很久,又拆下來重新裝的2.2,但是文件夾還是采用的2.1的根目錄文件夾,大家安裝2.2時,文件夾自然就是2.2的。
VC++目錄中 選擇庫目錄,加入目錄
至此,所有的目錄添加完畢,下面開始添加依賴庫。
在Properity Explorer(屬性管理器)里面右鍵選擇項目,選擇Properties(屬性),在Debug|Win32下選中Microsoft.Cpp.Win32.user右鍵選擇屬性,然后在Linker(鏈接器)里面選擇Input(輸入),在依賴庫里添加OPENCV的D:\Program Files\OpenCV2.1\forVS2010\lib中的.lib文件名稱即可
我把所有的lib文件名都填進去了,帶d的Debug庫(調試模式庫)和不帶d的Release庫(發布模式庫)都放到這里面。OK!
新建win32控制台項目,修改主文件為:
#include "stdafx.h" #include "highgui.h" //所有的以新風格命名的函數都在 cv 命名空間中 using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { const char* imagename = "E:\\lena.jpg"; Mat img = imread(imagename); // Matlab風格的 cvLoadImage 函數的另一種調用 if(img.empty()) { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } if( !img.data ) // 檢查是否正確載入圖像 return -1; namedWindow("image", CV_WINDOW_AUTOSIZE); //創建窗口 imshow("image", img); //顯示圖像 waitKey(); return 0; }
在VS2010中,圖片路徑一定要寫成"E:\\lena.jpg"; 這種形式。
在編譯時,可能直接Debug,程序不會有反應並且匯報:
Cannot find or open the PDB file
這個是因為在VS2010下的特殊原因,有人推薦
打開VS2010:工具--》選項--》調試--》符號
接下來就是選擇Microsoft,然后確認
但是這樣有一個缺點:編譯時間特別長,運行非常慢。
正解是:在運行時采用Ctrl+F5這樣問題就解決了。
在運行時還會出現雖然圖片的路徑正確,但是程序仍然報:cannot find the image
這時將VS2010的運行狀態從Debug轉換成Release,然后再Ctrl+F5,圖片正常顯示。