Toggle navigation Navigation
Toggle navigation
Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)
2014-02-04
2012年4月給同學寫了篇傻瓜式的 VS2010+Opencv-2.4.0的配置攻略 結果沒有想到,點擊量一路飆升,固定在了Google “Opencv 配置” 關鍵詞搜索的榜首。現在看看,已經過時了,版本升級後看不到ttb了,還有很多不足的地方需要修正。新電腦需要重新配置環境,結合新版本,再來寫篇最完美的傻瓜教程,看能不能超過以前的那篇 :)
環境:Windows 8.1, Opencv 2.4.8, VS 2013.
歡迎轉載或參考,但請尊重作者勞動成果,轉載請註明出處,參考請引用鏈接!
目錄
配置
下載安裝軟件
下載 Opencv for Windows 最新版本,本文是 Opencv 2.4.8。雙擊後會出現解壓提示,實際上就是“安裝”了,路徑填寫爲 D:/Program Files,然後確定。
Note
D:/Program Files 可以爲任意自己希望opencv安裝的路徑,解壓完成後,會在你所填目錄中新增一個 opencv文件夾,裏面就是opencv的所有內容了。例如按照我的路徑,解壓完成後Opencv就在 D:/Program Files/opencv 裏面了。
下載 VS 2013,並安裝。(自己找破解吧)
配置環境變量
在系統變量裏面新建變量,名爲 OPENCV ,值爲自己解壓opencv路徑下的build路徑,如 D:\Program Files\opencv\build。
Tip
這一步是方便以後如果opencv路徑改變了,只需要修改此變量就可以了,而不必做大範圍修改。
在系統變量裏面編輯 Path 變量,在末尾添加 ;%OPENCV%\x86\vc12\bin 。
Note
x86和x64分別表示32bit和64bit的VS工程,根據自己的工程來修改,否則雖編譯成功但會運行錯誤;vc10, vc11, vc12 分別表示VS2010, VS2012, VS2013的Visual Studio使用的編譯器版本,根據自己的VS版本來填寫正確的編譯器版本號。
Note
多謝 @玄影遊俠 的提醒,環境變量設置好後最好註銷(重啓)一下系統,可能有的系統環境變量不會立即生效,而導致一系列路徑相關的問題。
編寫Opencv的VS工程容屬性表
在opencv根目錄(例如 D:\Program Files\opencv)下新建VS屬性表文件 opencv248.props,或者直接下載我的 opencv248.props 屬性表文件。
opencv248.props 文件內容如下:
<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <IncludePath>$(OPENCV)\include;$(IncludePath)</IncludePath> <LibraryPath Condition="'$(Platform)'=='Win32'">$(OPENCV)\x86\vc12\lib;$(LibraryPath)</LibraryPath> <LibraryPath Condition="'$(Platform)'=='X64'">$(OPENCV)\x64\vc12\lib;$(LibraryPath)</LibraryPath> </PropertyGroup> <ItemDefinitionGroup> <Link Condition="'$(Configuration)'=='Debug'"> <AdditionalDependencies>opencv_calib3d248d.lib;opencv_contrib248d.lib;opencv_core248d.lib;opencv_features2d248d.lib;opencv_flann248d.lib;opencv_gpu248d.lib;opencv_highgui248d.lib;opencv_imgproc248d.lib;opencv_legacy248d.lib;opencv_ml248d.lib;opencv_nonfree248d.lib;opencv_objdetect248d.lib;opencv_ocl248d.lib;opencv_photo248d.lib;opencv_stitching248d.lib;opencv_superres248d.lib;opencv_ts248d.lib;opencv_video248d.lib;opencv_videostab248d.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> <Link Condition="'$(Configuration)'=='Release'"> <AdditionalDependencies>opencv_calib3d248.lib;opencv_contrib248.lib;opencv_core248.lib;opencv_features2d248.lib;opencv_flann248.lib;opencv_gpu248.lib;opencv_highgui248.lib;opencv_imgproc248.lib;opencv_legacy248.lib;opencv_ml248.lib;opencv_nonfree248.lib;opencv_objdetect248.lib;opencv_ocl248.lib;opencv_photo248.lib;opencv_stitching248.lib;opencv_superres248.lib;opencv_ts248.lib;opencv_video248.lib;opencv_videostab248.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup /></Project>
這份屬性表爲opencv2.4.8的VS2013工程屬性表,兼容64位和32位平臺,兼容Debug和Release配置。詳細解釋看後文,後面在VS工程中配置Opencv只需要導入這份屬性表就可以了。
Note
如果不是VS2013,或者Opencv版本不是2.4.8,一定要修改部分參數才能使用。詳細修改辦法看後文。
新建VS測試工程
文件 -> 新建 -> 項目 -> Visual C++ -> Win32 控制檯應用程序(輸入名稱test)
確定 -> 下一步 -> 附加選項選“空項目” -> 完成
VS內配置Opencv
這裏用VS屬性表的方式將Opencv配進工程,每次只需要添加屬性表即可完成配置,比手工界面配置方便很多。
屬性管理器 -> 右鍵 "test"(工程名) -> 添加現有屬性表
找到之前新建或者下載的屬性表( D:\Program Files\opencv\opencv248.props ),添加進工程
測試
解決方案資源管理器 -> 源文件(右鍵)-> 添加 -> 新建項
Visual C++ -> C++文件:輸入名稱test點添加
粘貼下面的代碼,保存:
#include <opencv2\opencv.hpp>#include <iostream>#include <string>using namespace cv;using namespace std;int main(){ Mat img = imread("pp.jpg"); if (img.empty()) { cout << "error"; return -1; } imshow("pp的靚照", img); waitKey(); return 0;}
把自己的靚照改名爲pp.jpg,然後放到工程項目的test文件夾裏面(是裏面那個test文件夾)
按F5調試程序,如果你的圖片出來了就OK了。
進階
直接文本編寫Opencv x64 x86 Debug Release 全兼容屬性表
新建屬性表文檔 opencv248.props,填寫下面的xml內容並保存:
<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup> <IncludePath>$(OPENCV)\include;$(IncludePath)</IncludePath> <LibraryPath Condition="'$(Platform)'=='Win32'">$(OPENCV)\x86\vc12\lib;$(LibraryPath)</LibraryPath> <LibraryPath Condition="'$(Platform)'=='X64'">$(OPENCV)\x64\vc12\lib;$(LibraryPath)</LibraryPath> </PropertyGroup> <ItemDefinitionGroup> <Link Condition="'$(Configuration)'=='Debug'"> <AdditionalDependencies>opencv_calib3d248d.lib;opencv_contrib248d.lib;opencv_core248d.lib;opencv_features2d248d.lib;opencv_flann248d.lib;opencv_gpu248d.lib;opencv_highgui248d.lib;opencv_imgproc248d.lib;opencv_legacy248d.lib;opencv_ml248d.lib;opencv_nonfree248d.lib;opencv_objdetect248d.lib;opencv_ocl248d.lib;opencv_photo248d.lib;opencv_stitching248d.lib;opencv_superres248d.lib;opencv_ts248d.lib;opencv_video248d.lib;opencv_videostab248d.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> <Link Condition="'$(Configuration)'=='Release'"> <AdditionalDependencies>opencv_calib3d248.lib;opencv_contrib248.lib;opencv_core248.lib;opencv_features2d248.lib;opencv_flann248.lib;opencv_gpu248.lib;opencv_highgui248.lib;opencv_imgproc248.lib;opencv_legacy248.lib;opencv_ml248.lib;opencv_nonfree248.lib;opencv_objdetect248.lib;opencv_ocl248.lib;opencv_photo248.lib;opencv_stitching248.lib;opencv_superres248.lib;opencv_ts248.lib;opencv_video248.lib;opencv_videostab248.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup /></Project>
這份屬性表爲opencv2.4.8的VS工程屬性表,兼容64位和32位平臺,兼容Debug和Release配置。
很容易看出如何修改:
如果你沒有配置%OPENCV%環境變量,則只需要修改 IncludePath 和 LibraryPath 所指三個標籤,用絕對路徑代替 $(OPENCV);
如果你的Visual Studio版本與我的不同,則需要修改 LibraryPath 所指兩個標籤的將編譯器版本號,VS2010對應vc10,VS2012對應vc11,VS2013對應vc12;
如果你的opencv與我的版本不同,只需要將兩個 AdditionalDependencies 標籤內的所有lib的版本號修正即可(所有的248改爲自己的版本號),並在opencv的lib目錄下檢查一下lib名稱是否對應。
通過VS界面建立自己的VS項目屬性表
網上一大堆,就不具體說明了。與自己文本編寫屬性表不同的是,通過界面新建的屬性表要爲不同的配置單獨建立,導入的時候也要針對配置單獨導入。
屬性管理器 ->展開 項目名 -> 右鍵 Debug | Win32 -> 添加新項目屬性表
添加屬性表,取名爲“opencv248x86.Debug.props”。
屬性管理器 ->展開 Debug | Win32 -> 雙擊 新建的 opencv248x86.Debug 打開屬性頁面 -> VC++ 目錄
編輯 包含目錄 一欄,添加opencv的include路徑,例如我的是 D:\Program Files\opencv\build\include;編輯 庫目錄 一欄,添加opencv的lib路徑,例如我的是 D:\Program Files\opencv\build\x86\vc12\lib 。
Note
將光標移到編輯框會在右邊出現小下拉三角,點擊小三角,再選擇編輯打開路徑選擇窗口選擇對應路徑。如果直接粘貼則粘貼在現有內容前面用分號隔開,否則會失去繼承性。
Note
庫目錄 一欄選擇opencv的lib路徑時,如果工程是64位則選擇opencv的x64目錄,如果是32位則選擇x86。Visual Studio的版本與編譯器版本號的對應關係是:VS2010 -> vc10, VS2012 -> vc11, VS2013 -> vc12,選擇目錄的時候注意自己的VS工程版本。
在屬性頁面 -> 鏈接器 -> 輸入 -> 附加依賴項 -> 編輯。添加下面的lib列表:
opencv_calib3d248d.lib opencv_contrib248d.lib opencv_core248d.lib opencv_features2d248d.lib opencv_flann248d.lib opencv_gpu248d.lib opencv_highgui248d.lib opencv_imgproc248d.lib opencv_legacy248d.lib opencv_ml248d.lib opencv_nonfree248d.lib opencv_objdetect248d.lib opencv_ocl248d.lib opencv_photo248d.lib opencv_stitching248d.lib opencv_superres248d.lib opencv_ts248d.lib opencv_video248d.lib opencv_videostab248d.lib
確定兩次後完成Debug版本的屬性表編輯。
同樣依照上面的步驟編寫Release版本的屬性表,唯一不同的是在“附加依賴項”中填入的是Release版本的lib列表:
opencv_calib3d248.lib opencv_contrib248.lib opencv_core248.lib opencv_features2d248.lib opencv_flann248.lib opencv_gpu248.lib opencv_highgui248.lib opencv_imgproc248.lib opencv_legacy248.lib opencv_ml248.lib opencv_nonfree248.lib opencv_objdetect248.lib opencv_ocl248.lib opencv_photo248.lib opencv_stitching248.lib opencv_superres248.lib opencv_ts248.lib opencv_video248.lib opencv_videostab248.lib
Tip
*d.lib的是Debug版本lib,*.lib的是Release版本lib。
Categories
Tags
pcduino , cv , 人生 , qt , reStructuredText , opencv , hadoop , ubuntu_for_ros , exbotxi , pelican , sphinx , ros , mapreduce , turtlebot , github , xtion , kinect , python , others , web , big data ,
Dates
Links
Copyright 2014 by Yuanbo She
Powered by Pelican ...