框架搭建
設想框架:
在VS2010 下的項目管理流程
RoadMarkingDetection:
工程項目入口,啓動項目,配置類型Configuration Type 爲Application(.exe)
可以調用以下所有模塊(.lib)。
commonClass:
保存全局數據類、工具類、共同操作類等算法模塊,配置類型Configuration Type 爲Static library(.lib)。
laneDetection:
車道線檢測算法模塊,配置類型Configuration Type 爲Static library(.lib),需調用commonClass模塊。
typeDetection:
車道線線型檢測算法模塊,配置類型Configuration Type 爲Static library(.lib)
需要車道線檢測結果,需調用laneDetection和commonClass模塊。
zebraDetection:
斑馬線檢測算法模塊,配置類型Configuration Type 爲Static library(.lib)
需要車道線檢測結果,需調用laneDetection和commonClass模塊。
stoplineDetection:
停止線檢測算法模塊,配置類型Configuration Type 爲Static library(.lib)
需要車道線檢測結果,需調用laneDetection和commonClass模塊。
添加多個項目
解決方案Solution à Add à New Project…
設置啓動項
在需要設置爲啓動的項目目錄上右鍵選擇“Set as Startup Project”
在VS工程中設置所有的輸出目錄:
爲了在工程中方便調用各個模塊(項目),可以將所有的輸出文件放在一個目錄下。
默認下輸出是:$(SolutionDir)$(Configuration)\
即在debug下輸出在項目文件夾下的debug文件夾下;在release下輸出在項目文件夾下的release文件夾下。
假設:現在不管debug或release都輸出在工程文件夾下的bin文件夾。
在項目下右鍵選擇項目屬性“Properties” à General à Output Directory
設置爲: $(ProjectDir)..\bin
設置模塊lib屬性
如果沒有加載其他依賴庫,只需要設置:
Output Directory和Configuration Type
設置啓動項目屬性
在項目下右鍵選擇項目屬性“Properties” à Debugging à Command
設置爲:$(ProjectDir)..\bin\$(TargetName)$(TargetExt)
在項目下右鍵選擇項目屬性“Properties” à Debugging à Working Directory
設置爲:$(ProjectDir)..\bin
設置exe項目包含lib項目屬性
RoadMarkingDetection項目需要可以調用所有模塊(.lib),在沒有加載其他依賴庫時設置以下屬性:
項目屬性“Properties” à C/C++ à GeneralàAdditional Include Directories
設置爲:
..\commonClass\
..\laneDetection\
..\typeDetection\
..\zebraDetection\
..\stoplineDetection\
項目屬性“Properties” à Linker à InputàAddition Dependencies
設置爲:
$(ProjectDir)..\bin\commonClass.lib
$(ProjectDir)..\bin\laneDetection.lib
$(ProjectDir)..\bin\typeDetection.lib
$(ProjectDir)..\bin\zebraDetection.lib
$(ProjectDir)..\bin\stoplineDetection.lib
設置lib項目包含lib項目屬性
工程內laneDetection、typeDetection、 zebraDetection、stoplineDetection等模塊都需要調用commonClass(lib)。在沒有加載其他依賴庫時設置以下屬性:
項目屬性“Properties” à C/C++ à GeneralàAdditional Include Directories
設置爲:..\commonClass\
(可選)項目屬性“Properties” à Librarian à GeneralàAdditional Dependencies
設置爲:..\commonClass\
在lib項目加OpenCV依賴庫
在VS項目中使用OpenCV網上有很多教程,大致是以下步驟:
①在“Properties” àVC++ DirectoriesàInclude Directories
輸入:
(OpenCV目錄)\build\include
(OpenCV目錄)\build\include\opencv2
(OpenCV目錄)\build\include\opencv
②在“Properties” àVC++ DirectoriesàLibrary Directories
輸入:
(OpenCV目錄)\build\x86\vc10\lib
③在“Properties” àLinkerà InputàAddition Dependencies
(OpenCV目錄)\build\x86\vc10\lib\*.lib
或
(OpenCV目錄)\build\x86\vc10\lib\*d.lib
Debug版用到的dll和lib文件都有後綴d,Release版使用的不帶d。
我們將配置屬性寫入屬性文件.props
這裏有幾篇參考文獻:
VS .props解析:
http://casparzhang.blog.163.com/blog/static/126626558201310179534471/
Visual Studio 2010 C++ 工程文件解讀
http://www.cnblogs.com/yaozhongxiao/p/3477308.html
VS2010屬性表的建立與靈活運用
http://blog.163.com/yuhua_kui/blog/static/9679964420146945822643/
將編譯完的OpenCV3.0.0放在解決方案根目錄下。
屬性配置文件myprop.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"> <OPENCV_300_X86_VC10_LIB>$(SolutionDir)OpenCV3.0.0\x86\vc10\lib</OPENCV_300_X86_VC10_LIB> <OPENCV_300_X86_VC10_LIB_CORE>$(OPENCV_300_X86_VC10_LIB)\opencv_core300.lib</OPENCV_300_X86_VC10_LIB_CORE> <OPENCV_300_X86_VC10_LIB_HGUI>$(OPENCV_300_X86_VC10_LIB)\opencv_highgui300.lib</OPENCV_300_X86_VC10_LIB_HGUI> <OPENCV_300_X86_VC10_LIB_IMGPROC>$(OPENCV_300_X86_VC10_LIB)\opencv_imgproc300.lib</OPENCV_300_X86_VC10_LIB_IMGPROC> <OPENCV_300_X86_VC10_LIB_VIZ>$(OPENCV_300_X86_VC10_LIB)\opencv_viz300.lib</OPENCV_300_X86_VC10_LIB_VIZ> <OPENCV_300_X86_VC10_LIB_OBJ_DETECT>$(OPENCV_300_X86_VC10_LIB)\opencv_objdetect300.lib</OPENCV_300_X86_VC10_LIB_OBJ_DETECT> <OPENCV_300_X86_VC10_LIB_CODECS>$(OPENCV_300_X86_VC10_LIB)\opencv_imgcodecs300.lib</OPENCV_300_X86_VC10_LIB_CODECS> <OPENCV_300_INCLUDE>$(SolutionDir)OpenCV3.0.0\include\</OPENCV_300_INCLUDE> <RINS_FA_STEREO_DEV>$(SolutionDir)RStereoGigEDev\</RINS_FA_STEREO_DEV> <RINS_FA_STEREO_DEV_VER>2.1.0.213\</RINS_FA_STEREO_DEV_VER> </PropertyGroup> <PropertyGroup /> <ItemDefinitionGroup /> <ItemGroup> <BuildMacro Include="OPENCV_300_X86_VC10_LIB"> <Value>$(OPENCV_300_X86_VC10_LIB)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_X86_VC10_LIB_CORE"> <Value>$(OPENCV_300_X86_VC10_LIB_CORE)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_X86_VC10_LIB_HGUI"> <Value>$(OPENCV_300_X86_VC10_LIB_HGUI)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_X86_VC10_LIB_IMGPROC"> <Value>$(OPENCV_300_X86_VC10_LIB_IMGPROC)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_X86_VC10_LIB_VIZ"> <Value>$(OPENCV_300_X86_VC10_LIB_VIZ)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_X86_VC10_LIB_OBJ_DETECT"> <Value>$(OPENCV_300_X86_VC10_LIB_OBJ_DETECT)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_X86_VC10_LIB_CODECS"> <Value>$(OPENCV_300_X86_VC10_LIB_CODECS)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> <BuildMacro Include="OPENCV_300_INCLUDE"> <Value>$(OPENCV_300_INCLUDE)</Value> <EnvironmentVariable>true</EnvironmentVariable> </BuildMacro> </ItemGroup> </Project> |
① 導入屬性配置文件myprop.props
② 項目屬性“Properties” à C/C++ à GeneralàAdditional Include Directories
設置爲:$(OPENCV_300_INCLUDE)
③ 項目屬性“Properties” à Librarian à GeneralàAdditional Dependencies
設置爲:
$(OPENCV_300_X86_VC10_LIB_CORE)
$(OPENCV_300_X86_VC10_LIB_HGUI)
$(OPENCV_300_X86_VC10_LIB_IMGPROC)
在exe項目加OpenCV依賴庫
①項目屬性“Properties” à C/C++ à GeneralàAdditional Include Directories
設置爲:$(OPENCV_300_INCLUDE)
②項目屬性“Properties” à Librarian à GeneralàAdditional Dependencies
設置爲:
$(OPENCV_300_X86_VC10_LIB_CORE)
$(OPENCV_300_X86_VC10_LIB_HGUI)
$(OPENCV_300_X86_VC10_LIB_IMGPROC)
$(OPENCV_300_X86_VC10_LIB_CODECS)
$(OPENCV_300_X86_VC10_LIB_VIZ)