環境
操作系統:Windows 7 旗艦版 32-bit (6.1, Build 7601) Service Pack 1
opencv版本:version 2.4.3
C++:Microsoft Visual C++ 2010 Express
過程
可以有兩種方式安裝opencv開發庫:第一種,使用預編譯的庫(.exe格式)直接安裝;第二種,從git上獲取最新的源代碼,然后自己編譯。
Solution 1:使用預編譯的庫
從下面的網站中下載需要的opencv版本,這里是opencv 2.4.3(這一版本好像沒有提供預編譯的庫):
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/
下載得到的OpenCV-2.4.3.exe,其實是一個打包的文件,運行之后得到一個3.10G大小的文件夾,名為opencv,如圖:
這里好像是需要自已進行編譯的,所以還是采用第二種方法。
Solution 2:本地編譯
step 1:安裝必要的軟件和第三方庫
- 安裝Microsoft Visual Studio ,當然可以采用其它的IDE開發工具,這里我使用的是 Microsoft Visual C++ 2010 Express
- 安裝CMake,用於從opencv的源代碼中,產生相應的項目文件——用於編譯產生必要的庫,我使用的是cmake-2.8.10.2-win32-x86.exe
- opencv源代碼,有兩種方式獲得(推薦第二種方式)(第一種方式獲得440M左右的源代碼,第二種方式則有3.10G左右包括了預編譯的庫等):
- 第一方式,使用git工具獲取最新源代碼 (比較慢)
- 下載安裝msysgit,https://code.google.com/p/msysgit/downloads/list,我使用的是msysGit-fullinstall-1.8.1-preview20130110.exe
- 下載安裝TortoiseGit,https://code.google.com/p/tortoisegit/wiki/Download,這是git的一個GUI前端,方便使用。我使用的版本是TortoiseGit-1.7.15.0-32bit.msi。安裝好后設置msysgit的地址,打開settings,設置Git.exe目錄,
- 在D盤建立文件夾opencv,進入這個文件夾,右鍵選擇Git Clone,在URL中填入 https://github.com/Itseez/opencv.git,點擊OK
- 第二方式,使用打包好的代碼安裝程序(推薦這一種方式),可以在http://sourceforge.net/projects/opencvlibrary/files/opencv-win/下載,其實就是OpenCV-2.4.3.exe這個程序,直接運行即可 。我把解壓后得到的opencv文件夾放在D:\Develop\opencv_src中。
- 第一方式,使用git工具獲取最新源代碼 (比較慢)
上面三項內容已足以開始opencv的編譯安裝,但是還有一些第三方的工具,推薦安裝。
- python庫,提供opencv中python的API, 我使用2.7.3版本
- 安裝python擴展安裝工具Setuptools(用於安裝sphinx),貌似只支持到python2.7版本
- 安裝Sphinx(python文檔生成工具,用於創建opencv文檔)
- 打開powershell (或者cmd)
- 執行:cd D:\Develop\Python27\Scripts
- 再執行:.\easy_install.exe sphinx,就好了
- Numpy,python的科學計算包 。下載並安裝即可。我使用的是numpy-1.7.0rc1-win32-superpack-python2.7.exe,它會自動檢測python的安裝目錄
- Miktex,tex文檔編輯生成工具,用於生成pdf格式的opencv文檔,我使用的是basic-miktex-2.9.4521.exe,它會根據需要自動下載相應的宏包。
- Intel © Threading Building Blocks (TBB),opencv中的一些並行代碼可以使用TBB來進行加速,不裝也無所謂,裝上則運算效果更好一些。我使用的是4.1 update 1 ,將其解壓放入一個文件夾即可,如,D:\Develop\TBB
-
Intel © Integrated Performance Primitives ( IPP),(收費)加速色彩變換,Haar 訓練,DFT函數,這里我沒有使用 - Qt framework,opencv本身可以利用Qt庫獲得更好的圖形界面支持(相對於最初始的highgui). 目前,qt支持到vs2010,如果使用vs2012就需要從源代碼進行編譯。
- 下載qt庫的開源安裝包(在這里下載http://qt-project.org/downloads),我使用的是qt-win-opensource-4.8.4-vs2010.exe,直接運行安裝即可
-
Eigen,針對線性代數運算的C++模板庫,實現了線性代數的相關算法。下載並解壓到相關的文件,如,D:\Develop\Eigen,我使用的是3.1.2版本,但是在編譯opencv的時候,設置EIGEN_INCLUDE_PATH為D:/Develop/Eigen/eigen-eigen-5097c01bcdc4/Eigen/src,會提示找不到Eigen/core,我猜測可能要對Eigen編譯安裝才行。對Eigen的編譯需要使用Fortain庫。 - OpenEXR,用於處理高動態范圍的圖像的函數庫,下載並解壓放在一個目錄即可,如:D:\Develop\openexr-1.7.1
-
OpenNI Framework,沒有使用,openNI與特定的采集設備配合可以實現人機交互,手勢識別等等一系列的功能,其中一種采集設備就是Kinect
Step 2:使用CMake進行配置
- 打開CMake(cmake-gui),設置”where is the source code”和”Where to build the binaries”,如下圖所示:
其中第一行是opencv源代碼的位置,第二行是你想要用於編譯opencv的位置,下面的Grouped和Advanced建議選上,可以對配置選項進行分組。
- 按下左下方的Configure,選擇Visual Studio 10,如圖
然后選擇Finish,CMake會對當前的環境進行檢測。如果沒有問題就會完整顯示如下畫面:
- 在WITH中,勾選需要使用的特性,比如我要使用TBB和Qt,那么就把WITH_TBB,WITH_QT選上。
- 在Ungrouped Entries組中,手工指定CMake沒有檢測到,而你又需要使用的環境變量。比如,我需要TBB,就設定TBB_INCLUDE_DIRS為D:/Develop/TBB/tbb41_20121003oss/include等等。在這一步中,將上述第三方庫諸如python,qt等的環境變量在Ungrouped Entries中設定好。
- 瀏覽其它選項,選擇需要的內容,特別地,在ENABLE中的ENABLE_SOLUTION_FOLDERS必須確定選上
- 設定完成后,點擊左下方Generate,生成vs2010的工程文件。
Step 3:使用vs2010進行編譯
- 進入在CMake中”Where to build the binaries”所設定的目錄,打開vs2010的solution,通過選擇下述的下拉菜單,來選擇編譯Debug版本和release版本(Build->Build Solution)。
- 編譯安裝DEBUG版本
- 選擇Debug模式,選擇Build->Build Solution,等待build完成。這一過程中可能會出現缺少python27_d.lib相關的錯誤,可以不必理會
- 在INSTALL項目上,右鍵單擊,選擇build,這一步會把debug模式相關的文件(include,lib等)生成到<build目錄>\install下。這一過程中,關於python27_d.lib的錯誤可以不必理會
- 編譯安裝RELEASE版本
- 選擇Release模式,選擇Build->Build Solution,等待build完成。
- 在INSTALL項目上,右鍵單擊,選擇build,這將會把release模式相關的文件(include,lib等)生成到<build目錄>\install下。
最后生成的<build目錄>\install如下圖所示:
<build目錄>\install\lib如下圖所示:(同時包含release和debug的庫)
- 然后編譯opencv的文檔,如圖所示,分別單獨編譯docs和html_docs(文檔不會自動build)
build過程會自動調用sphinx和Miktex進行文檔的創建。docs的結果在<build目錄>\doc中為pdf文件,html_docs的結果在<build目錄>\doc\_html文件夾中為index.html。這時候可以再build一次INSTALL項目,將生成的文檔安裝到<build目錄>\install\doc下
Step 4:添加OpenCV路徑至PATH
推薦使用Path Editor進行添加,如下圖所示:
其中我還添加了TBB和Qt的bin路徑。
另外,還可以設置系統的環境變量OPENCV_DIR來指向OpenCV的安裝路徑。我的是D:\Develop\Opencv\install
Step 5:檢查OpenCV是否安裝成功
打開<opencv Build目錄>\install\bin\Debug\contours2.exe(或者其他程序),如果成功運行,則表示OpenCV安裝成功!運行結果如下:
遇到的問題
- 問題一:在使用cmake的過程中,點擊Configure后,提示如下:
The CXX compiler identification is MSVC 16.0.30319.1
The C compiler identification is MSVC 16.0.30319.1
Check for working CXX compiler using: Visual Studio 10
Check for working CXX compiler using: Visual Studio 10 -- broken
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCXXCompiler.cmake:54 (message):
The C++ compiler "C:/Program Files/Microsoft Visual Studio
10.0/VC/bin/cl.exe" is not able to compile a simple test program.…… ……
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid
or corrupt
[D:\Develop\Opencv\CMakeFiles\CMakeTmp\cmTryCompileExec521527363.vcxproj]Done Building Project
"D:\Develop\Opencv\CMakeFiles\CMakeTmp\cmTryCompileExec521527363.vcxproj"
(default targets) -- FAILED.…… ……
解決的辦法:
首先,打開cmd,切換到C:/Program Files/Microsoft Visual Studio 10.0/VC/bin/目錄,執行cl.exe命令,出現錯誤,提示缺少mspdb100.dll,根據dudu的一篇文章《解決VS2010自帶的C/C++編譯器CL找不到mspdb100.dll的問題》,執行:
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"
即可解決由環境變量缺失造成cl.exe不能使用的問題其次,對於 fatal error LNK1123,根據stackoverFlow的一個提問 LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt after installing VS2012 release preview,這是因為我安裝了vs2012,導致vs2012自帶的.NET4.5替換了原有的.NET,我卸載了vs2012以及.NET4.5組件,重新安裝.NET4.0,再次Configure就好了。cl.exe不能正常執行是由error LNK1123造成的,單單解決環境變量問題不能解決“‘cl.exe’ is not able to compile a simple test program”的問題
- 問題二:執行CMake的configure命令,出現如下錯誤:
CMake Warning at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindQt4.cmake:615 (message):
C:/Qt/Qt5.0.0/5.0.0/msvc2010/bin/qmake.exe reported QT_INSTALL_LIBS as
"C:/Qt/Qt5.0.0/5.0.0/msvc2010/lib" but QtCore could not be found there. Qt
is NOT installed correctly for the target build environment.
Call Stack (most recent call first):
cmake/OpenCVFindLibsGUI.cmake:8 (find_package)
CMakeLists.txt:377 (include)…… ……
解決的辦法:
這一問題是因為,一開始我使用的是Qt5,我在C:/Qt/Qt5.0.0/5.0.0/msvc2010/lib中確實沒有找到QtCore,而且CMmake使用的是FindQt4.cmake,並不能找到Qt5的一些關鍵文件。換句話說,目前CMake(2.8.10.2)並不支持Qt5,所以我只好將Qt5卸載然后安裝qt-4.8.4,問題解決。
- 問題三:在使用vs2010編譯Debug版本的opencv時,提示如下錯誤:
Error 1 error LNK1104: cannot open file 'python27_d.lib' D:\Develop\Opencv\modules\python\LINK
解決的辦法:
這是因為在編譯Debug版的opencv時需要使用debug類型的庫,python27_d.lib是python的debug庫,這個問題不解決也沒有關系。如果要解決的話,可以下載python的源代碼,然后編譯python的Debug版本即可,不是一般的麻煩。
- 問題四:如果在CMake中設置了GIT_EXECUTABLE,運行Configure之后,會顯示缺少libiconv-2.dll的錯誤
解決的方法:
這個問題的解決可以參考stackoverflow上的一個提問Git for Windows - The Program can't start because libiconv2.dll is missing,而我由於沒有設置GIT_EXECUTABLE,所以就回避了這個問題。
主要參考資料
OpenCV的在線文檔《Installation in Windows》,http://docs.opencv.org/doc/tutorials/introduction/windows_install/windows_install.html#windowssetpathandenviromentvariable