1. 程式人生 > >OpenCV的安裝經驗(Linux)

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引數,在使用時指定cmakeOpenCV_DIR變數。
  • 至於為何指定的是cmakeOpenCV_DIR變數,是因為,該變數指定了一個cmake的配置檔案存放的地址。OpenCV算是一個非常非常標準的cmake工程庫了,所以它非常完善地採用了cmake的這個特性。大家可以在上文的目錄裡找到OpenCVConfig.cmake這個配置檔案。這是一個cmake工程的標準配置檔案,指定了本庫的標頭檔案、庫檔案的安裝位置,並設定了相關變數。各發行版自帶的安裝包自帶了OpenCVConfig.cmake這個配置檔案。且OpenCV_DIR變數也預設會指向相應路徑,所以我們在apt-get install後才可以安逸地通過find_package(OpenCV REQUIRED)去使用自帶版本的庫。同時用OpenCV_INCLUDE_DIRSOpenCV_LIBS去指定標頭檔案地址,連結的庫檔案。
  • 後期我會再次總結cmake在大專案中的常用套路。
  • 感覺OpenCV官方提供的cmake指令碼應該支援更優雅的方法以實現多版本共存、解除安裝等機制,如果有哪位讀者有所瞭解歡迎指教!