1. 程式人生 > >[ubuntu 16.04 安裝 opencv3.4.1 以及 opencv_contrib 3.4.1]

[ubuntu 16.04 安裝 opencv3.4.1 以及 opencv_contrib 3.4.1]

學習高翔slam14講的過程當中安裝opencv發現又是各種報錯,現記錄如下,以供後人參考。

1、首先下載opencv和opencv_contrib的庫

我下載的是3.4.1

2、把這兩個包解壓並且把opencv_contrib-3.4.1這整個資料夾拷貝到opencv-3.4.1資料夾裡面去

unzip opencv-3.4.1.zip 
unzip opencv_contrib-3.4.1.zip
cp -r opencv_contrib-3.3.1 opencv-3.3.1  #複製opencv_contrib到opencv目錄下

3、安裝opencv所需要的依賴項

sudo apt-get install build-essential libvtk5-dev  

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  

sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev

sudo apt-get install pkg-config

上面的這些依賴項你係統裡面可能已經安裝過了,所以只要沒有報錯就行了,它會提示你係統內已經安裝過的。

slam14講裡面的依賴項還有一個libvtk5-dev,這個依賴項把我給弄慘了,一直報錯:

the following packages have unmet dependencies:

  libvtk5-dev: Depends: libnetcdf-dev but it is not going to be installed

                     Depends: libnetcdf-cxx-legacy-dev but it is not going to be installed

                     Depends: libvtk5.10( = 5.10.1+dfsg-2.1build1) but it is not going to be installed

然後後來我就放棄掙扎打算先安裝ros,安裝過程當中發現更改成中科大映象源之後,libvtk5-dev這個依賴項就可以安裝了!!!

更改映象源這個有很多部落格都介紹了,我簡單複製過來了

sudo gedit /etc/apt/sources.list

會彈出一個gedit 的文件,把裡面的內容替換成下面的內容。如果你不願意刪除原來的那些內容,怕以後有什麼問題,可以用“#”把它們先註釋掉,然後加上下面的這些內容也可以。

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

然後執行:

sudo apt-get update

再安裝libvtk5-dev就可以安裝上了

sudo apt-get install libvtk5-dev

好的,到這裡依賴項總算是完成了。下面我們開始編譯opencv原始碼

3、編譯

這裡我先放出錯誤,以作警示。

//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'
//usr/lib/x86_64-linux-gnu/libvtkIOImage-6.2.so.6.2: undefined reference to `[email protected]_4.0'

這裡可把我給害慘了!!!痛苦。。。上面我有提到我因為安裝不了libvtk5-dev這個依賴項先去安裝了ros,這個時候我的ros已經安裝好了,可以運行了,也發現libvtk5-dev這個依賴項可以安裝了,然後開始開開心心的編譯安裝opencv,但又發現了這個錯誤。我在網上查了一下解決辦法,有人說執行下面兩條指令就有用。具體有沒有用我不清楚,但是可把我害慘了!!!autoremove 直接把我剛剛安裝好的ros的各種依賴給remove了!!!我剛安裝好的ros就這樣沒了,心中一萬個草泥馬飛過。

sudo apt-get autoremove libtiff5-dev

sudo apt-get install libtiff5-dev

好的,淡定,這是自己踩的坑,微笑走下去,我又開始在網上找解決辦法,果然還是stackoverflow大法好,終於找到了解決辦法,cmake的時候加上“ -D BUILD_TIFF=ON ”。

為了照顧一些還不瞭解如何操作cmake指令的童鞋,所以還是寫詳細一些:

首先進入opencv-3.4.1這個資料夾裡面,然後開啟終端:

mkdir build
cd build

這裡是為了讓cmake產生的檔案都放到build裡面去,不會顯得那麼亂,好的下面是最重要的cmake指令了,大家要看仔細了:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/npkhgl/software/opencv-3.4.1/opencv_contrib-3.4.1/modules/ -D BUILD_TIFF=ON .. 

因為我們還安裝了opencv-contrib,所以還有一個OPENCV_EXTRA_MODULES_PATH 這個變數名,後面要跟上你自己的路徑名,記得修改一下

後面就是簡單的

sudo make
sudo make install

你也可以使用多執行緒編譯,-j8表示使用8執行緒編譯,速度快很多。

sudo make-j8
sudo make install

4、連結庫共享 

編譯安裝完畢之後,為了讓你的連結庫被系統共享,讓編譯器發現,需要執行管理命令ldconfig:

sudo ldconfig -v 

5、接下來可以配置一些OpenCV的編譯環境首先將OpenCV的庫新增到路徑,從而可以讓系統找到,接下來的步驟參照了

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

執行此命令後開啟的可能是一個空白的檔案,不用管,只需要在檔案末尾新增

/usr/local/lib  

6、執行如下命令使得剛才的配置路徑生效

sudo ldconfig  

這個時候可能會提示錯誤如下圖所示(上部分) 

sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符號連線 
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符號連線 

出現這個錯誤可能是由於系統BUG所致

只需要分別執行下部分的四行命令就可解決 

sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org 
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org 
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1 
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1

7、配置bash

sudo gedit /etc/bash.bashrc 

 在最末尾新增

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  

儲存,執行如下命令使得配置生效

source /etc/bash.bashrc  

更新

sudo updatedb 

8、至此所有的配置都已經完成  下面用一個小程式測試一下

找到  cd到opencv-3.4.1/samples/cpp/example_cmake目錄下  我們可以看到這個目錄裡官方已經給出了一個cmake的example我們可以拿來測試下  按順序執行

cmake .
make
./opencv_example

即可看到打開了攝像頭,在左上角有一個hello opencv  即表示配置成功

至此,總結一下:

一定不要輕易autoremove!!!很容易把其他軟體依賴的庫給刪掉,從而導致其他軟體無法正常使用。安裝其他東西的時候也一定要注意不要同意系統提示的remove!!!