為什么要配置opencv_contrib?
opencv3.0版本 功能更加模塊塊,一些功能模塊不夠完善,等足夠完善在merge到主分支中,而我們圖像識別中要用到的SIFT等算法被封裝在xfeacture模塊並且不在主分支,所以要用的時候需要編譯它
[ opencv_contrib-github地址 ]
工具准備
- VS2013 (VS系列,我這邊用的是2013版本)
- cmake
想要在Windows平台下生成OpenCV的解決方案,我們需要一個名為cmake的開源軟件,可以在camke的官網:http://www.cmake.org/上下載到
- 首先轉到其下載頁面。下載頁面的Source distributions處可以下載到cmake軟件的源碼,如果對這款開源軟件感興趣,不妨看看
- 而Binary distributions處可以下載到cmake的執行文件,我們只需要下載到其執行文件即可,選擇Windows (Win32 Installer)進行下載,點擊這里直接下載:http://www.cmake.org/files/v3.4/cmake-3.4-win32-x86.exe, 安裝教程挺簡單的,略(上面步驟實在不會,可參考:ORZ淺墨大神)
使用cmake生成OpenCV源代碼工程的解決方案
在上面的github README.md里面有提供詳細的教程
有兩種方案選擇:
- You can build OpenCV, so it will include the modules from this repository. Here is the CMake command for you:
$ cd <opencv_build_directory> $ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory> $ make -j5
As the result, OpenCV will be built in the with all modules from opencv_contrib repository. If you don’t want all of the modules, use CMake’s BUILD_opencv_* options. Like in this example:
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules -DBUILD_opencv_legacy=OFF <opencv_source_directory>
用命令行簡單粗暴,不過我在使用的時候出現錯誤,說缺少某些庫文件,google了一番說還要要控制其他參數,為了弄個萬能教程,我們采用下面的方法
- cmake-gui
If you prefer using the gui version of cmake (cmake-gui), then, you can add opencv_contrib modules within opencv core by doing the following:
- 啟動cmake-gui
- 選擇opencv source code 文件夾 和 where binaries will be built個人的存放如圖所示,注意build里面的內容是之后要進行opencv配置的
- 按configure按鈕進行進行第一次configure,第一次時間有點長,成功之后如上圖所示
- 在search那里搜索
OPENCV_EXTRA_MODULES_PATH
並在value那欄選擇文件夾的方式(browse button)找到opencv_contrib的存放地址(/modules) - 再次按下configure button,之后在按generate button
- 看到Generating done字樣,沒有報錯,大功告成
可以去之前我們指定的D:\opencv3\opencv\build下找尋我們生成的解決方案了。
INSTALL
用cmake工具生成解決方案之后,還要做的一步就是install,如果是用命令行的方式,只需要 cmake install
或者將解決方案sln導入VS
1. 打開OpenCV的解決方案,右擊CMakeTargets下的INSTALL,選擇“生成”,生成Debug版的dll和lib
2. 如果需要Release的話,修改配置為“Release”,重復步驟1,生成Release版的dll和lib
3. 生成完畢,在OpenCV解決方案下的install文件夾里就有了dll,lib和h頭文件了。
4. 雖然生成了庫文件了,如果可以Debug跟蹤源碼,還得保留OpenCV解決方案
重新配置環境
注意的一點是,我一開始用的是官網opencv3.0的包,在
上篇blog[http://www.cnblogs.com/france/p/4853706.html] 已經講解了如何配置開發環境了,或者參考http://blog.csdn.net/poem_qianmo/article/details/19809337
那么這里要注意的是
- Path重新配置,然后記得重啟
- VS property pages 中
VC++ Directories 的include Directories(.hpp存放地) 改成如下(就是換了地址)
D:\opencv3\opencv\build\install\include\opencv2; D:\opencv3\opencv\build\install\include\opencv; D:\opencv3\opencv\build\install\include;
Library Directories(lib存放地) 更改地址 D:\opencv3\opencv\build\install\x86\vc12\lib
- Linker Input中修改為如下:
opencv_imgproc300d.lib; opencv_imgcodecs300d.lib; opencv_highgui300d.lib; opencv_features2d300d.lib; opencv_core300d.lib; kernel32.lib;user32.lib; opencv_xfeatures2d300d.lib; opencv_ts300d.lib; gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
具體的lib文件名,可在D:\opencv3\opencv\build\install\x86\vc12\lib
中找到,不一樣要全部都加進去(當然都加進去最好,我這里只加了一些我比較會用到的lib),300表示3.00版本,+d表示debug否則為release版本,
而在原來我們官網下的opencv3.0基本版只要加opencv_ts300d.lib;
和opencv_world300d.lib;
但是我們自己編譯完發現opencv_world300d.lib;
已經舍棄了,換成各種各樣詳細的包了,和2.x的加的lib個數差不多,因為是完整版本了。
PS:如果在寫代碼和編譯的時候沒有提示錯誤,說明hpp文件和lib引用是存在的,但是在鏈接和運行的時候報錯說沒有找到相應的方法,就是沒有配置上面具體lib,動態鏈接的時候出錯
PS2:CSDN的markdown炒雞好用,博客園要加油了
參考:
http://www.nmtree.net/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html
http://blog.csdn.net/poem_qianmo/article/details/21974023
http://blog.csdn.net/poem_qianmo/article/details/19809337