opencv從2.x到3.x源碼結構變動非常大,很多功能不完善、性能不穩定或測試不完全的模塊,都被放在了extra_modules(opencv_contrib)裏面。官方給出的解釋是:所有新模塊都應單獨開發,並首先在opencv_contrib中發佈 ,當模塊成熟並獲得普及時,再將其移至opencv主庫中,這時開發團隊也將爲該模塊提供後續支持。
最近要用到一些特徵點檢測算法,3.0以後這些算法都移到了xfeacture2d模塊中,下面記錄一下編譯過程。
1. 編譯OpenCV
下載源碼,按照常規思路編譯即可,基本步驟:
- cmake設置opencv源碼目錄、編譯目錄及安裝目錄(CMAKE_INSTALL_PREFIX);
- “Configure”->“Generate”,選擇編譯器;
- 編譯源碼。
2. 編譯opencv_contrib模塊
(1)下載並解壓opencv_contrib源碼:
(2)在opencv的cmake中設置OPENCV_EXTRA_MODULES_PATH爲opencv_contrib源碼路徑:
(3)“Configure”後選擇需要編譯的模塊:
“Configure”後會出現opencv_contrib中模塊的編譯選項,選擇需要編譯的模塊,並點擊Configure和Generate。我這裏編譯了xfeatures2d模塊,把他勾上:
(4)編譯
Generate完後打開工程直接編譯即可。
3. 常見錯誤處理
3.1 找不到文件
報錯:無法打開包括文件:“vgg_generated_120.i”:No such file or directory。
可以直接下載這些文件放到對應目錄(xx/opencv_contrib-3.x.x/modules/xfeatures2d/src)即可,這裏給出地址:
- boostdesc_lbgm.i
- boostdesc_bgm.i
- boostdesc_bgm_bi.i
- boostdesc_bgm_hd.i
- boostdesc_binboost_064.i
- boostdesc_binboost_128.i
- boostdesc_binboost_256.i
- vgg_generated_48.i
- vgg_generated_64.i
- vgg_generated_80.i
- vgg_generated_120.i
3.2 無法引用頭文件
編譯時會出現一些錯誤,編譯xfeatures2d模塊時下面的4個文件會出錯,都是頭文件引用路徑出現問題,最簡單的解決方案是把它改成絕對路徑,不嫌麻煩的話也可以把這些頭文件複製到工程include目錄下或把頭文件路徑添加到CMakeLists.txt中。