以前,windows下配置OpenCV一直不太方便:總是要手動添加lib,添加include,還要配置PATH使得程序運行時候能找到dll文件。
每次新建一個使用OpenCV的工程都要手動添加,很麻煩;而且,有時候需要不同版本的OpenCV測試。如果從32位模式切換到64位模式,又需要替換一次配置。。一旦有一個配錯了,就總是徘徊在各種配置項的檢查上。
后來,看到了freedomshe用屬性表進行配置,其提供的屬性表文件確實方便,但是還是需要手動配置OpenCV環境變量、追加OpenCV中的bin目錄到PATH上(bin中有dll文件)。能不能不配置?(免得保不準自己又要重啟機器...)
答案當然是可以!
配置OpenCV環境變量的目的在于,include路徑、lib路徑都使用這個前綴,能減少打字的次數;同時也是要把opencv的幾個dll文件所在路徑,追加到系統PATH上。
只要我們在屬性表文件中自行定義OpenCV根目錄,添加include路徑、lib路徑,添加dll目錄,以后使用OpenCV的項目只需要導入這個屬性表就OK了,太簡單了!
當然,以前的老版本中的各種dll和lib分成好多個文件,現在的版本如果編譯了opencv_contrib
也會有額外的dll和lib,這些需要的時候再添加就好了。
廢話不多說,這是OpenCV3.0.0的通用屬性表文件opencv300.props
<?xml version="1.0" encoding="utf-8"?>
<!--
OpenCV 3.0.0 屬性表文件
不用單獨配置環境變量OpenCV
也不用單獨在系統PATH上添加OpenCV可執行路徑
只需要在 "菜單"-"視圖"-"屬性管理器"中添加現有屬性表,添加本文件
使用前請將下面的OpenCVRoot修改為你的OpenCV根目錄
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<!-- 請把OpenCVRoot屬性的值替換為你的OpenCV編譯輸出的目標目錄,它包含x64、x86這樣的子目錄 -->
<OpenCVRoot>F:\chris\lib\opencv-3.1.0\buildExtra\install</OpenCVRoot>
<!-- 指定INCLUDE路徑-->
<IncludePath>$(OpenCVRoot)\include;$(IncludePath)</IncludePath>
<!-- 指定鏈接所需lib目錄-->
<LibraryPath Condition="'$(Platform)'=='Win32'">$(OpenCVRoot)\x86\vc12\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Platform)'=='X64'">$(OpenCVRoot)\x64\vc12\lib;$(LibraryPath)</LibraryPath>
<!-- 保證系統處于Debug模式時,可以使用相對路徑讀取源代碼目錄下的文件,比如"lena.jpg"而不必是"d:/work/test/test/lena.jpg" -->
<LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<!-- 讓系統PATH臨時包含指定的dll目錄 -->
<LocalDebuggerEnvironment Condition="'$(Platform)'=='Win32'">PATH=%PATH%;$(OpenCVRoot)\x86\vc12\bin</LocalDebuggerEnvironment>
<LocalDebuggerEnvironment Condition="'$(Platform)'=='X64'">PATH=%PATH%;$(OpenCVRoot)\x64\vc12\bin</LocalDebuggerEnvironment>
</PropertyGroup>
<!-- 以下是程序需要加載的lib文件。-->
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_ts300d.lib;opencv_world310d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_ts300.lib;opencv_world310.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
如果是opencv3.1那么lib只需要配置opencv_world310,對應的屬性表文件為:
<?xml version="1.0" encoding="utf-8"?>
<!--
OpenCV 3.1.0屬性表文件
不用單獨配置環境變量OpenCV
也不用單獨在系統PATH上添加OpenCV可執行路徑
只需要在VisualStudio-"菜單"-"視圖"-"屬性管理器"中添加現有屬性表,添加本文件
使用前請將下面的OpenCVRoot修改為你的OpenCV編譯輸出目錄
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<!-- 請把OpenCVRoot屬性的值替換為你的OpenCV編譯輸出的目標目錄,它包含x64、x86這樣的子目錄 -->
<OpenCVRoot>D:\lib\opencv310\build</OpenCVRoot>
<!-- 指定INCLUDE路徑-->
<IncludePath>$(OpenCVRoot)\include;$(IncludePath)</IncludePath>
<!-- 指定鏈接所需lib目錄-->
<LibraryPath Condition="'$(Platform)'=='Win32'">$(OpenCVRoot)\x86\vc12\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Platform)'=='X64'">$(OpenCVRoot)\x64\vc12\lib;$(LibraryPath)</LibraryPath>
<!-- 保證系統處于Debug模式時,可以使用相對路徑讀取源代碼目錄下的文件,比如"lena.jpg"而不必是"d:/work/test/test/lena.jpg" -->
<LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<!-- 讓系統PATH臨時包含指定的dll目錄 -->
<LocalDebuggerEnvironment Condition="'$(Platform)'=='Win32'">PATH=%PATH%;$(OpenCVRoot)\x86\vc12\bin</LocalDebuggerEnvironment>
<LocalDebuggerEnvironment Condition="'$(Platform)'=='X64'">PATH=%PATH%;$(OpenCVRoot)\x64\vc12\bin</LocalDebuggerEnvironment>
</PropertyGroup>
<!-- 以下是程序需要加載的lib文件。-->
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_world310d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_world310.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
當然有時候需要使用OpenCV_contrib,那么編譯好contrib后就增加了很多dll和lib,對應的屬性表文件是這樣的(opencv3.1版):
<?xml version="1.0" encoding="utf-8"?>
<!--
OpenCV 3.1.0 帶contrib的屬性表文件
不用單獨配置環境變量OpenCV
也不用單獨在系統PATH上添加OpenCV可執行路徑
只需要在 "菜單"-"視圖"-"屬性管理器"中添加現有屬性表,添加本文件
使用前請將下面的OpenCVRoot修改為你的OpenCV根目錄
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<!-- 請把OpenCVRoot屬性的值替換為你的OpenCV編譯輸出的目標目錄,它包含x64、x86這樣的子目錄 -->
<OpenCVRoot>F:\chris\lib\opencv-3.1.0\buildExtra\install</OpenCVRoot>
<!-- 指定INCLUDE路徑-->
<IncludePath>$(OpenCVRoot)\include;$(IncludePath)</IncludePath>
<!-- 指定鏈接所需lib目錄-->
<LibraryPath Condition="'$(Platform)'=='Win32'">$(OpenCVRoot)\x86\vc12\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Platform)'=='X64'">$(OpenCVRoot)\x64\vc12\lib;$(LibraryPath)</LibraryPath>
<!-- 保證系統處于Debug模式時,可以使用相對路徑讀取源代碼目錄下的文件,比如"lena.jpg"而不必是"d:/work/test/test/lena.jpg" -->
<LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<!-- 讓系統PATH臨時包含指定的dll目錄 -->
<LocalDebuggerEnvironment Condition="'$(Platform)'=='Win32'">PATH=%PATH%;$(OpenCVRoot)\x86\vc12\bin</LocalDebuggerEnvironment>
<LocalDebuggerEnvironment Condition="'$(Platform)'=='X64'">PATH=%PATH%;$(OpenCVRoot)\x64\vc12\bin</LocalDebuggerEnvironment>
</PropertyGroup>
<!-- 以下是程序需要加載的lib文件。-->
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_aruco310d.lib;opencv_bgsegm310d.lib;opencv_bioinspired310d.lib;opencv_calib3d310d.lib;opencv_ccalib310d.lib;opencv_core310d.lib;opencv_cudaarithm310d.lib;opencv_cudabgsegm310d.lib;opencv_cudacodec310d.lib;opencv_cudastereo310d.lib;opencv_cudawarping310d.lib;opencv_cudev310d.lib;opencv_datasets310d.lib;opencv_dnn310d.lib;opencv_dpm310d.lib;opencv_face310d.lib;opencv_features2d310d.lib;opencv_flann310d.lib;opencv_fuzzy310d.lib;opencv_highgui310d.lib;opencv_imgcodecs310d.lib;opencv_imgproc310d.lib;opencv_line_descriptor310d.lib;opencv_ml310d.lib;opencv_objdetect310d.lib;opencv_optflow310d.lib;opencv_plot310d.lib;opencv_reg310d.lib;opencv_rgbd310d.lib;opencv_saliency310d.lib;opencv_shape310d.lib;opencv_stereo310d.lib;opencv_structured_light310d.lib;opencv_surface_matching310d.lib;opencv_text310d.lib;opencv_tracking310d.lib;opencv_ts310d.lib;opencv_video310d.lib;opencv_videoio310d.lib;opencv_world310d.lib;opencv_ximgproc310d.lib;opencv_xobjdetect310d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_aruco310.lib;opencv_bgsegm310.lib;opencv_bioinspired310.lib;opencv_calib3d310.lib;opencv_ccalib310.lib;opencv_core310.lib;opencv_cudaarithm310.lib;opencv_cudabgsegm310.lib;opencv_cudacodec310.lib;opencv_cudastereo310.lib;opencv_cudawarping310.lib;opencv_cudev310.lib;opencv_datasets310.lib;opencv_dnn310.lib;opencv_dpm310.lib;opencv_face310.lib;opencv_features2d310.lib;opencv_flann310.lib;opencv_fuzzy310.lib;opencv_highgui310.lib;opencv_imgcodecs310.lib;opencv_imgproc310.lib;opencv_line_descriptor310.lib;opencv_ml310.lib;opencv_objdetect310.lib;opencv_optflow310.lib;opencv_plot310.lib;opencv_reg310.lib;opencv_rgbd310.lib;opencv_saliency310.lib;opencv_shape310.lib;opencv_stereo310.lib;opencv_structured_light310.lib;opencv_surface_matching310.lib;opencv_text310.lib;opencv_tracking310.lib;opencv_ts310.lib;opencv_video310.lib;opencv_videoio310.lib;opencv_world310.lib;opencv_ximgproc310.lib;opencv_xobjdetect310.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
===========
P.S. 有人可能會問,上面的屬性表XML文件里面的各屬性是如何確定的?屬性值容易設定,屬性名確實不是一眼看出來的。
可以通過新建一個工程,在工程的屬性中手動設定VC++、C/C++、鏈接器等條目中的項,進行設定后vs2013會寫入到
文章列表