標籤:blog http io ar os 使用 sp for strong
http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html
2012年4月給同學寫了篇傻瓜式的 VS2010+Opencv-2.4.0的配置攻略 結果沒有想到,點擊量一路飆升,固定在了Google “Opencv 配置” 關鍵詞搜尋的榜首。現在看看,已經過時了,版本升級後看不到ttb了,還有很多不足的地方需要修正。新電腦需要重新設定環境,結合新版本,再來寫篇最完美的傻瓜教程,看能不能超過以前的那篇 :)
環境:Windows 8.1, Opencv 2.4.8, VS 2013.
歡迎轉載或參考,但請尊重作者勞動成果,轉載請註明出處,參考請引用連結!
目錄
- 配置
- 下載安裝軟體
- 配置環境變數
- 編寫Opencv的VS工程容屬性工作表
- 建立VS測試工程
- VS內配置Opencv
- 測試
- 進階
- 直接文本編寫Opencv x64 x86 Debug Release 全相容屬性工作表
- 通過VS介面建立自己的VS項目屬性工作表
配置下載安裝軟體
下載 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.libopencv_contrib248d.libopencv_core248d.libopencv_features2d248d.libopencv_flann248d.libopencv_gpu248d.libopencv_highgui248d.libopencv_imgproc248d.libopencv_legacy248d.libopencv_ml248d.libopencv_nonfree248d.libopencv_objdetect248d.libopencv_ocl248d.libopencv_photo248d.libopencv_stitching248d.libopencv_superres248d.libopencv_ts248d.libopencv_video248d.libopencv_videostab248d.lib
確定兩次後完成Debug版本的屬性工作表編輯。
同樣依照上面的步驟編寫Release版本的屬性工作表,唯一不同的是在“附加依賴項”中填入的是Release版本的lib列表:
opencv_calib3d248.libopencv_contrib248.libopencv_core248.libopencv_features2d248.libopencv_flann248.libopencv_gpu248.libopencv_highgui248.libopencv_imgproc248.libopencv_legacy248.libopencv_ml248.libopencv_nonfree248.libopencv_objdetect248.libopencv_ocl248.libopencv_photo248.libopencv_stitching248.libopencv_superres248.libopencv_ts248.libopencv_video248.libopencv_videostab248.lib
Tip
*d.lib的是Debug版本lib,*.lib的是Release版本lib。
Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)