opencv目前已經支持caffe訓練模型的讀取,以及使用模型進行預測,這個功能是dnn模塊實現的,而這個模塊位於opencv_contrib中,此前編譯的opencv3.2.0並沒有將opencv_contrib中的模塊加進來。因此,這裏重新將opencv_contrib加入到opencv3.2.0進行編譯。
這裏假定已經安裝了vs2013(或vs2015)和cmake等,沒有安裝的要先行安裝好,再繼續接下來的操作。
1、下載opencv和opencv_contrib源碼
1.1 下載opencv3.2.0源碼(https://github.com/opencv/opencv/releases/tag/3.2.0)。
1.2 下載opencv_contrib源碼(https://github.com/opencv/opencv_contrib/releases)
注意:一定要下載和OpenCV源碼版本一致的版本(這裏均是3.2.0版本)。
2、Cmake配置與編譯
2.1 將opencv源碼和opencv_contrib源碼均解壓到編譯文件目錄下(這裏是D:\Libraries\OpenCV320)。
2.2 在編譯文件夾下新建opencv320-build和msvc2013_64文件夾,分別作爲編譯目錄和安裝目錄。
打開Cmake,添加源碼目錄和編譯目錄,configure,選擇Visual Studio 12 2013 Win64作爲生成工具,finish,如下圖。(如報錯,請參考第5部分的常見問題與解決方案)
2.3 在OPENCV_EXTRA_MODULES_PATH選項中添加opencv_contribute中的modules路徑。
同時,修改安裝路徑:
添加debug後綴,以避免安裝時,release版本的將debug版本的覆蓋掉。
繼續configure,成功後,點generate,生成編譯工程成功。(如報錯,請參考第5部分的常見問題與解決方案)
3、vs2013編譯與安裝
generate成功以後,在opencv320-build文件夾下,會生成如下衆多文件,打開OpenCV.sln。
分別在Debug和Release環境下,先BUILD->Build Solution,再將INSTALL設爲啓動項,BUILD->Project Only->Build Only Install。
編譯安裝成功,在msvc2013_64文件夾下,會看到如下文件夾:
4、配置opencv的環境。
4.1 設置環境變變量,將安裝文件夾下的bin文件夾目錄添加到環境變量路徑中。
4.2 在編譯文件夾下添加opencv320.props文件(具體位置和名稱可以根據需要設定),並向該文件中添加如下內容(主要是頭文件和靜態庫),保存。在vs2013中使用時opencv時,只需要將改文件添加到工程的property manager中即可。
<?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>D:\Libraries\OpenCV320\msvc2013-64\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Platform)'=='X64'">D:\Libraries\OpenCV320\msvc2013-64\x64\vc12\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<Link Condition="'$(Configuration)'=='Debug'">
<AdditionalDependencies>opencv_calib3d320d.lib;opencv_core320d.lib;
opencv_cudaarithm320d.lib;opencv_cudabgsegm320d.lib;opencv_cudacodec320d.lib;
opencv_cudafeatures2d320d.lib;opencv_cudafilters320d.lib;opencv_cudaimgproc320d.lib;
opencv_cudalegacy320d.lib;opencv_cudaobjdetect320d.lib;opencv_cudaoptflow320d.lib;
opencv_cudastereo320d.lib;opencv_cudawarping320d.lib;opencv_cudev320d.lib;
opencv_features2d320d.lib;opencv_flann320d.lib;opencv_highgui320d.lib;
opencv_imgcodecs320d.lib;opencv_imgproc320d.lib;opencv_ml320d.lib;
opencv_objdetect320d.lib;opencv_photo320d.lib;opencv_shape320d.lib;
opencv_stitching320d.lib;opencv_superres320d.lib;opencv_video320d.lib;
opencv_videoio320d.lib;opencv_videostab320d.lib;
opencv_aruco320d.lib;opencv_bgsegm320d.lib;opencv_bioinspired320d.lib;
opencv_ccalib320d.lib;opencv_datasets320d.lib;opencv_dnn320d.lib;
opencv_dpm320d.lib;opencv_face320d.lib;opencv_fuzzy320d.lib;
opencv_line_descriptor320d.lib;opencv_optflow320d.lib;opencv_phase_unwrapping320d.lib;
opencv_plot320d.lib;opencv_reg320d.lib;opencv_rgbd320d.lib;opencv_saliency320d.lib;
opencv_stereo320d.lib;opencv_structured_light320d.lib;opencv_superres320d.lib;
opencv_surface_matching320d.lib;opencv_text320d.lib;opencv_tracking320d.lib;
opencv_xfeatures2d320d.lib;opencv_ximgproc320d.lib;opencv_xobjdetect320d.lib;
opencv_xphoto320d.lib;
%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Link Condition="'$(Configuration)'=='Release'">
<AdditionalDependencies>opencv_calib3d320.lib;opencv_core320.lib;
opencv_cudaarithm320.lib;opencv_cudabgsegm320.lib;opencv_cudacodec320.lib;
opencv_cudafeatures2d320.lib;opencv_cudafilters320.lib;opencv_cudaimgproc320.lib;
opencv_cudalegacy320.lib;opencv_cudaobjdetect320.lib;opencv_cudaoptflow320.lib;
opencv_cudastereo320.lib;opencv_cudawarping320.lib;opencv_cudev320.lib;
opencv_features2d320.lib;opencv_flann320.lib;opencv_highgui320.lib;
opencv_imgcodecs320.lib;opencv_imgproc320.lib;opencv_ml320.lib;
opencv_objdetect320.lib;opencv_photo320.lib;opencv_shape320.lib;
opencv_stitching320.lib;opencv_superres320.lib;opencv_video320.lib;
opencv_videoio320.lib;opencv_videostab320.lib;
opencv_aruco320.lib;opencv_bgsegm320.lib;opencv_bioinspired320.lib;
opencv_ccalib320.lib;opencv_datasets320.lib;opencv_dnn320.lib;
opencv_dpm320.lib;opencv_face320.lib;opencv_fuzzy320.lib;
opencv_line_descriptor320.lib;opencv_optflow320.lib;opencv_phase_unwrapping320.lib;
opencv_plot320.lib;opencv_reg320.lib;opencv_rgbd320.lib;opencv_saliency320.lib;
opencv_stereo320.lib;opencv_structured_light320.lib;opencv_superres320.lib;
opencv_surface_matching320.lib;opencv_text320.lib;opencv_tracking320.lib;
opencv_xfeatures2d320.lib;opencv_ximgproc320.lib;opencv_xobjdetect320.lib;
opencv_xphoto320.lib;
%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
5、編譯中常見的問題與解決方案:
a) Cmake編譯,加入opencv_contrib中的modules後,進行configure,有些模塊會報錯,只需要將相應的模塊勾選掉繼續configure即可。
b) 如果編譯的過程中出現反覆,雖然configure成功,但是generate失敗,或者generate成功,但是使用vs編譯時出錯。最好的辦法是將此前的文件都刪除,重新解壓源碼,進行Cmake配置和編譯。
c) 如果此前系統中已經配置過opencv,建議將opencv的執行目錄從環境變量裏清除掉。
d) Cmake配置的過程中要保證網絡的通暢,如果由於長時間沒有下載第三方依賴庫文件不成功而報錯,可以直接在谷歌或度娘上搜索相關文件,下載下來手動放到相關文件夾下,再繼配置即可。
e) opencv和opencv_contrib版本一定要一致,否則配置和編譯會出錯。
至此,編譯成功,下一篇將介紹,如何在dnn中調用caffe的訓練模型。
----------------------
參考:
[1] http://docs.opencv.org/3.2.0/de/d25/tutorial_dnn_build.html
[2] http://answers.opencv.org/question/147923/build-error-open-cv32-with-extra-libs/
2017.07.19