OpenCV的安裝經驗(Linux)
OpenCV的安裝經驗
OpenCV是計算機視覺最常用的庫了,本身很大,而很多linux發行版上會自帶OpenCV的軟體包,這導致了大家在安裝時經常會碰到多版本共存的問題。在此我總結了我使用OpenCV的方法套路,使用此方法安裝、匯入工程可以靈活地選擇自己要安裝的版本。
安裝
首先當然是去官網下載原始碼安裝包。地址如下
http://opencv.org/releases.html
似乎3.x的版本和2.4版本的介面變化挺大。等有時間了再去仔細研究吧。
本文推薦,安裝目錄和原始碼在一個目錄下,以避免汙染系統的/usr。具體命令如下:
unzip opencv-2.4.13.3.zip
cd opencv-2.4.13.3
mkdir build destdir
cd build
cmake ..
make
make install DESTDIR =../destdir/
解釋
如命令所示,在原始碼根目錄下建立了一個編譯專案的build
目錄,同時建立了一個存放專案位置的destdir
目錄。我當前的原始碼目錄如下所示(比較久遠有多個自建的目錄):
圖中共有四個新建的目錄dist是最初安裝的版本。dist_withgtk是後來程式設計需要加上gtk編譯的版本。而distdir是為了寫本文而構建的目錄。
注意
make install DESTDIR =../destdir/
此命令的DESTDIR
後的引數定義了需要安裝的位置。而專案安裝在此目錄後,專案指令碼會自動建立標準unix的程式碼與庫架構並將專案安裝進去:
由此推測安裝指令碼的預設值應該是系統根目錄
。而直接安裝,會為以後解除安裝,更新帶來很多麻煩(更新。。。沒試過)。所以通常我建議自己定製它。
使用
以上就是專案安裝的方法。而安裝了以後,該如何使用自己編譯好的版本呢?這就要談到cmake了。通常我們使用OpenCV都是在使用cmake構建的工程下。而一般網上部落格的教程都是如下程式碼:
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS} )
add_executable(exec sources)
target_link_libraries(exec ${OpenCV_LIBS} )
其實本文提出的方法區別不大,就是在find_package
前加上
set(OpenCV_DIR "/home/xdeddy/Desktop/deplib/opencv-3.2.0/destdir/usr/local/share/OpenCV")
注意路徑中/home/xdeddy/Desktop/deplib/opencv-3.2.0/destdir
就是編譯後的檔案安裝的根目錄,就是上文DESTDIR
指定的位置,根據實際情況修改即可。且後面的/usr/local/share/OpenCV
必須加上,這是固定不變的。
總結與討論
- 本文推薦的方法很簡單,核心就是在安裝時指定
make install
後的DESTDIR
引數,在使用時指定cmake
的OpenCV_DIR
變數。 - 至於為何指定的是
cmake
的OpenCV_DIR
變數,是因為,該變數指定了一個cmake的配置檔案存放的地址。OpenCV
算是一個非常非常標準的cmake工程庫了,所以它非常完善地採用了cmake的這個特性。大家可以在上文的目錄裡找到OpenCVConfig.cmake
這個配置檔案。這是一個cmake
工程的標準配置檔案,指定了本庫的標頭檔案、庫檔案的安裝位置,並設定了相關變數。各發行版自帶的安裝包自帶了OpenCVConfig.cmake
這個配置檔案。且OpenCV_DIR
變數也預設會指向相應路徑,所以我們在apt-get install
後才可以安逸地通過find_package(OpenCV REQUIRED)
去使用自帶版本的庫。同時用OpenCV_INCLUDE_DIRS
和OpenCV_LIBS
去指定標頭檔案地址,連結的庫檔案。 - 後期我會再次總結cmake在大專案中的常用套路。
- 感覺OpenCV官方提供的cmake指令碼應該支援更優雅的方法以實現多版本共存、解除安裝等機制,如果有哪位讀者有所瞭解歡迎指教!