ubuntu16.04(14.04)(重)安裝OpenCV3.3.0與opencv_contrib3.3.0及常見問題解決方案(附文件下載鏈接)

 
這篇博客主要內容:
  - opencv3.3.0和opencv_contrib-3.3.0文件下載地址
  - 安裝過程卡死的解決方案,ippicv和face_landmark_model文件手動下載鏈接
  - opencv環境變量設置
  - 編輯opencv注意事項.
  - 安裝多個版本opencv,編譯如何指定版本
 
關於opencv_contrib模塊的概述,請參考博客:OpenCV_contrib模塊概述
 

一. 文件下載和準備

1. 下載及解壓

   (1) opencv3.3.0下載地址:github
   (2) opencv_contrib-3.3.0三種下載地址:github百度網盤, 提取碼: k9g2  CSDN下載
 
下載解壓完之後,將opencv_contrib-3.3.0移動到opencv3.3.0目錄下.

2. 更新

sudo apt-get update && sudo apt-get upgrade

3. 安裝依賴項

sudo apt-get install build-essential 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

 若電腦未安裝cmake,則需要先安裝cmake,參考其他博客

二. 開始安裝

1. 我的電腦之前安裝過opencv3.1.0(沒有安裝opencv_contrib),這次把opencv的prefix目錄放在/usr/local/opencv3.3.0中.

cd xxx/opencv3.3.0;//進入到存放opencv3.3.0的目錄
mkdir build && cd build;
sudo cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/opencv3.3.0 -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.3.0/modules/ -DOPENCV_ENABLE_NONFREE=True ..

注意:
  (1) 如果你之前未安裝過opencv,則將CMAKE_INSTALL_PREFIX=/usr/local/opencv3.3.0改爲CMAKE_INSTALL_PREFIX=/usr/local即可,注意,後面的環境變量的路徑也要跟着修改.
  (2) OPENCV_EXTRA_MODULES_PATH就是opencv_contrib-3.3.0下面的modules目錄,需自己修改.
  (3) -DOPENCV_ENABLE_NONFREE=True,這句話意思是安裝opencv專利模塊,非常重要.

2. 解決cmake過程中,卡在IPPICV 和 face_landmark_model.dat下載的問題

(1) 手動下載:
 - ippcv: ippicv_2017u3_lnx_intel64_general_20170822.tgz
 - face_landmark_model: face_landmark_model.dat
 
(2) 修改配置文件 - ippicv

gedit xxx/opencv-3.3.0/3rdparty/ippicv/ippicv.cmake

上面的xxx爲自己的opencv-3.3.0的路徑.然後修改ippicv.cmake的第47行,修改爲自己下載的ippicv文件的路徑:

#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" #修改前
"file:///home/xtl/package/opencv-3.3.0/ippicv_2017u3_lnx_intel64_general_20170822"  #修改後

(3) 修改配置文件 - face_landmark_model

gedit xxx/opencv-3.3.0/opencv_contrib-3.3.0/modules/face/CMakeLists.txt

上面的xxx爲自己的opencv-3.3.0的路徑,然後修改CMakeLists的第19行,修改爲自己下載的dat路徑:

"file:///home/xtl/package/opencv-3.3.0/face_landmark_model.dat"

3. 重新編譯

sudo cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/opencv3.3.0 -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.3.0/modules/ -DOPENCV_ENABLE_NONFREE=True ..
sudo make -j4

make過程中,等待時間較長,不要着急,我跑了半個小時,有些可能更長.
然後安裝:

sudo make install

安裝完畢之後,看到下面的結果,恭喜你,opencv3.3.0和opencv_contrib安裝成功了!就差需要配置環境變量了.
安裝成功截圖

三. 設置環境變量

1. 添加opencv庫路徑

注意,這裏根據上面第二節第1點中的路徑相應修改。

sudo gedit /etc/ld.so.conf.d/opencv.conf

添加目錄:

/usr/local/opencv3.3.0/lib

2. 添加pkg環境變量

sudo gedit /etc/profile

在文本後添加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv3.3.0/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3.3.0/lib/pkgconfig

注意,如果之前有定義過LD_LIBRARY_PATH或者PKG_CONFIG_PATH,那麼只需要將/usr/local/opencv3.3.0/lib加在後面即可,用:分開.比如:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxx:/usr/local/opencv3.3.0/lib

其中,xxx表示之前添加的目錄.

3. 添加bash環境變量

sudo gedit /etc/bash.bashrc

在文本後添加(注意,這裏根據上面第二節第1點中的路徑相應修改):

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3.3.0/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv3.3.0/lib

同樣,跟上面第2點中的注意事項一樣,如有,則添加在後面即可.然後

source /etc/bash.bashrc

4. 更新系統緩存

sudo ldconfig
sudo updatedb

四. 測試

pkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs opencv

五. 查看OpenCV程序鏈接到的opencv版本信息

1. 在CMakeLists文件中的add_executable()前加入:

message(STATUS "OpenCV library status:")
message(STATUS "version: ${OpenCV_VERSION}")
message(STATUS "libraries:${OpenCV_LIBS}")
message(STATUS "include path:${OpenCV_INCLUDE_DIRS}")

然後在cmake ..的時候,就會打印出鏈接到的opencv的版本等信息.

2. 使用ldd命令

對於ubuntu下已經編譯好的可執行文件,也就是add_executable(xxx main.cpp)中的第一個命名文件xxx.

ldd xxx

即可打印出該可執行文件鏈接到的所有庫的名字和版本信息.

3. 如果找不到opencv路徑,或者依然鏈接到了之前的版本

對於找不到opencv路徑的解決辦法:在CMakeLists中的find_package(OpenCV REQUIRED)之前添加:

set (CMAKE_PREFIX_PATH "/usr/local/opencv3.3.0")

對於依然鏈接到之前版本的opencv,比如我的鏈接到了之前的opencv3.1,則修改CMakeLists中:

find_package( OpenCV 3.3 REQUIRED )

這樣就限制了至少要大於3.3的opencv版本.
 

六.cmake時指定版本opencv

通常我們可以用find_package(OpenCV 3.3.0 REQUIRED)使得編譯器,只會找高於或等於3.3.0版本的opencv,但是如果我們還安裝了opencv3.4.0呢?
或者像博主一樣,即使只裝了一個opencv3.3.0,但是由於裝了ros,ros帶有opencv3.3.1,cmake默認指向了ros的opencv,我想指向我安裝的opencv3.3.0,應該怎麼辦呢?

1.讓cmake找到指定版本的opencv的OpenCVConfig.cmake文件

find_package(OpenCV REQUIRED)前加上:

 #OpenCVConfig.cmake所在的文件目錄
set(OpenCV_DIR "/usr/local/opencv3.3.0/share/OpenCV") 

2.直接指定頭文件目錄

find_package(OpenCV REQUIRED)前加上:

set(OpenCV_INCLUDE_DIRS "/usr/local/opencv3.3.0/include")

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章