不斷更新的OpenCV視覺庫,包含了大量較新的計算機視覺方面的研究成果,很多新的算法都放在了OpenCV_contrib,即擴展模塊。這些新算法使用了OpenCV的數據結構或其它算法來做支撐,很多並不能單獨分離直接使用,這時候我們就需要編譯OpenCV和擴展模塊。
這篇博客總結了如何編譯安裝擴展模塊,並且進行單步調試OpenCV源碼的方法。
擴展模塊下載:https://github.com/opencv/opencv_contrib
工具:Cmake+Visual Studio
1. 選擇源碼路徑和build路徑,如下圖
爲了方便管理,這裏build路徑最好給出明確的名字。
2. 點擊Configure,填寫擴展模塊module路徑
找到OPENCV分組下的OPENCV_EXTRA_MODULE_PATH,填寫路徑爲擴展模塊下modules文件夾,如下圖:
這裏有兩點需要注意:
第一:修改安裝路徑,找到CMAKE_INSTALL_PREFIX是後續安裝的路徑,可以按自己喜歡修改。
第二:這時候最好去掉BUILD_EXAMPLES,BUILD_PERF_TEST,BUILD_TEST。對於後續使用opencv,完全沒有影響,還可以減少編譯項,加快後面編譯的速度。
3. 設置路徑,再次Configure
這一步很關鍵,確保擴展模塊的安裝正確前提是各種目錄在這一步配置好。
這裏的路徑是指:你需要安裝的模塊的第三方庫。比如Viz模塊依賴VTK,SFM模塊依賴ceres,這些依賴庫是需要提前編譯安裝好的。在cmake路徑中搜索對應依賴庫的名字,找到對應的項。一般來說需要設置路徑的有三種:
xx_DIR: 這裏路徑填寫爲能夠找到依賴庫的xxConfig.cmake文件,如果填寫錯誤,cmake的錯誤輸出也會提示無法找到xx對應cmake文件
xx_INCLUDE_DIR: 依賴庫頭文件所在目錄
xx_LIBRARIES: 依賴庫的lib文件,手選
如果填寫的路徑正確,那麼點擊Configure成功後,查看輸出信息,如下圖。To be built中會有對應的模塊名字,這樣就算路徑配置成功了
注:configure這一步,cmake會下載一些文件,可能會因爲網絡導致文件下載失敗(有條件掛上VPN比較好)。遇到這種情況,如果是某個模塊部分文件下載失敗,不會影響Configure和Generate,具體問題可以再具體解決,比如xfeature模塊中文件下載失敗,可以後續補上具體文件。
4. Generate
點擊生成即可,Configure沒問題,這一步也會沒問題。
5. Visual Studio編譯安裝(Debug和Release都做一次)
找到之前制定的build文件夾,打開OpenCV.sln,右擊解決方案->生成ALL_BUILD。接下來就是等待編譯完成。
潛在問題:因爲每個模塊可能依賴於其它模塊生成的lib,有可能前一模塊還沒完成,後一模塊就在編譯。這種情況時,查看輸出,找到缺少的lib對應項目,單獨生成一下,再開始ALL_BUILD就會沒問題。(原因考慮是VS對於多項目的編譯方式造成,不同項目都遇到了,但是沒有深究,以上方法就解決了問題)
上述完成後,找到INSTALL項目,生成INSTALL,就可以安裝在之前制定的文件夾中。
6. 使用時的配置
新建一個項目時,需要配置一下幾項:
- 附加包含目錄:項目屬性->C/C+±>常規->附加包含目錄,填寫安裝目錄下的include路徑。
- 附加庫目錄:項目屬性->鏈接器->常規->附加包含目錄,填寫安裝目錄下的lib路徑。
- 可執行文件目錄:項目屬性->VC++目錄->可執行文件目錄,填寫安裝目錄下bin。
*7. 單步調試源碼
如果想在使用時,使用單步調試加入相應模塊的源碼,則需要再添加一個目錄:
可執行文件目錄:項目屬性->VC++目錄->可執行文件目錄,填寫build文件夾下…\bin\Debug路徑。注意這裏和第六步中不同,因爲這個文件夾下含有pbd文件,可以讓我們進行單步調試,更好地幫助我們學習源代碼的執行過程與算法原理。
同時Release文件夾下也有pbd文件,一般來說Release模式下不能調試,這裏留個問題,等我找到答案,再來解釋。