1. 程式人生 > 其它 >Ubuntu系統 OpenCV4.2.0安裝

Ubuntu系統 OpenCV4.2.0安裝

技術標籤:筆記opencv

官方釋出版本:
https://opencv.org/releases/
官方教程地址:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html

方法一:

1.下載安裝包

將其解壓,我這裡還將起移動到home資料夾下面了

2.進入到解壓後的檔案包中,安裝依賴庫和cmake

如果提醒需要apt-get update,那就先sudo su進入root許可權,再sudo apt-get update,然後在執行下面命令:

 sudo apt-get install cmake

sudo apt-get
install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

3.安裝完cmake之後執行命令 ,建立編譯資料夾

mkdir build

cd build

4.之後cmake一下:

 cmake -D CMAKE_BUILD_TYPE=Release \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D BUILD_SHARED_LIBS=ON \ 
          -D BUILD_STATIC_LIBS=
ON \ -D CMAKE_C_COMPILER=/usr/bin/gcc-5 ..

5.之後我們輸入以下命令,進行編譯:

sudo make -j8 

-j8的意思代表8執行緒編譯

6.之後對其進行安裝:

sudo make install

7.之後配置一些OpenCV的編譯環境首先將OpenCV的庫新增到路徑,從而可以讓系統找到:

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

在其開啟的檔案中新增:

/usr/local/lib

8.執行如下命令使得剛才的配置路徑生效:

sudo ldconfig 

9.配置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

檢視版本:

pkg-config --modversion opencv

方法二:

首先,OpenCV 有在ubuntu上安裝的官方文件:https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html

1.安裝相關軟體包

開啟終端,安裝以下軟體包

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

第三行中,可能會出現 無法定位軟體包libjasper-dev 的錯誤提示

查閱資料後找到解決方法如下(原文:https://blog.csdn.net/weixin_41053564/article/details/81254410)

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt upgrade
sudo apt install libjasper1 libjasper-dev

其中 libjasper1 是 libjasper-dev 的依賴包

2.獲取Source

接下來獲取 OpenCV 的 source 檔案,直接到官網下載:https://opencv.org/releases/

點選對應版本的 Source 即可下載

下載成功後解壓,解壓到哪個資料夾都可以

3.用 CMake 從 Source 構建 OpenCV

進入解壓出來的OpenCV-4.1.0資料夾,建立一個新資料夾,我建立的叫 build

進入新資料夾,開啟終端,進入這個資料夾

執行命令

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

如果報錯,那麼去掉 -D後面的空格再嘗試一下,即

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

這之中 , /usr/local 是 OpenCV 的安裝路徑

接下來開始編譯

sudo make -j8

編譯結束後

sudo make install

4.配置環境

這部分參考了 https://blog.csdn.net/sandalphon4869/article/details/94398876#3launchjson_144

首先將OpenCV的庫新增到路徑,從而可以讓系統找到

開啟opencv.conf ,開啟後很可能是空白

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

在文末新增

/usr/local/lib

儲存後,執行如下命令使得剛才的配置路徑生效

sudo ldconfig 

接下來配置 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 

到這裡配置就完成了

5.測試

轉到 opencv-4.1.0/sample/cpp/example_cmake 目錄下,開啟終端

執行

cmake .
make
./opencv_example

如果攝像頭開啟,左上角出現 Hello OpenCV 則證明安裝成功

方法三:

1.下載依賴

sudo apt-get install cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev  # 處理影象所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev      # 處理視訊所需的包
sudo apt-get install ffmpeg

# 可能需要安裝的依賴
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

2.cmake

cmake 過程中需要 ippicv,下載會很慢,所以先準備好, 下載地址:https://www.lanzous.com/i8qmxsh
開啟原始碼中的 opencv/3rdparty/ippicv/ippicv.cmake 檔案
找到: “https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/” # 在最後位置
修改為:“file:~/home/serinus/ippicv” # 下載的 ippicv 目錄
進入opencv原始碼目錄,建立build 目錄,cd build 執行

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv  -D WITH_GTK=ON -D WITH_OPENMP=ON ..

解釋每個含義:
cmake -D CMAKE_BUILD_TYPE=Release # 選擇釋出
OPENCV_GENERATE_PKGCONFIG=YES # 建立 PKGCONFIG檔案
CMAKE_INSTALL_PREFIX=/usr/local/opencv #安裝路徑
WITH_GTK=ON # ubuntu 上顯示視窗必須加上這個

解決ippicv下載問題:ippicv_2019_lnx_intel64_general_20180723.tgz
解決辦法:離線下載後手動安裝
第一步,下載ippicv_2019_lnx_intel64_general_20180723.tgz
百度雲盤連結: https://pan.baidu.com/s/1eyG7mqKLY6CvUQdh7CbUgA 提取碼: 1miu
第二步,修改opencv安裝包解壓資料夾下’3rdparty/ippicv/ippicv.cmake’配置檔案
按以下內容進行修改。

# 將47行的
 
     "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}ippicv/"

# 改為步驟1中手動下載的檔案的本地路徑(也就是將網路下載的模式改為本地檔案下載的模式):
 
    "file:/home/username/" #(僅供參考,根據自己的路徑填寫)

第三步,重新cmake。

3.安裝

make -j4
sudo make install
#  現在 opencv 已經安裝好了

安裝好後,include目錄在/usr/local/include/opencv4下,庫目錄在/usr/local/lib下

4.1 配置環境變數

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

新增如下內容,並儲存:/usr/local/lib
配置庫sudo ldconfig

4.2 新增修改環境變數

sudo gedit /etc/bash.bashrc

在末尾新增如下內容

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

重啟系統

reboot

測試安裝情況,檢視安裝版本

kg-config opencv4 --modversion 
# or
pkg-config --cflags --libs opencv4

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv4' found

原因:在configrue時,為指定 OPENCV_GENERATE_PKGCONFIG為NO(OFF為關閉),而安裝後並未自動生成響應的opencv4.pc檔案
網上的許多的教程都未給出該選項
當然,如果你勾選吧,那麼,就沒有下面4.3的問題啦

4.3 建立opencv4.pc

sudo gedit /usr/local/lib/pkgconfig/opencv4.pc

新增如下內容

# Package Information for pkg-config
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv4/opencv
includedir_new=${prefix}/include/opencv4

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.2.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

再次pkg-config測試

kg-config --cflags --libs opencv4
-I/usr/local/include/opencv4/opencv -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

pkg-config 命令介紹:用於獲得某一個庫/模組的所有編譯相關的資訊
所有用opencv的其他程式,在編譯時,只需要寫“pkg-config opencv –libs –cflags”,而不需要自己去找opencv的標頭檔案在哪裡,要連結的庫在哪裡!省時省力!
pkg-config介紹參考
sudo ldconfig 命令介紹: ldconfig是一個動態連結庫管理命令,其目的為了讓動態連結庫為系統所共享。
主要是在預設搜尋目錄/lib和/usr/lib以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下,否則需要 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/<you_dir>/lib
搜尋出可共享的動態連結庫(格式如lib*.so*),進而創建出動態裝入程式(ld.so)所需的連線和快取檔案,
快取檔案預設為/etc/ld.so.cache,此檔案儲存已排好序的動態連結庫名字列表。
linux下的共享庫機制採用了類似快取記憶體機制,將庫資訊儲存在/etc/ld.so.cache,程式連線的時候首先從這個檔案裡查詢,然後再到ld.so.conf的路徑中查詢。
為了讓動態連結庫為系統所共享,需執行動態連結庫的管理命令ldconfig,此執行程式存放在/sbin目錄下。
ldconfig介紹參考 https://blog.csdn.net/winycg/article/details/80572735

5.配置 vs code opencv 標頭檔案

開啟vs code,ctrl + shift + p 搜尋:c_cpp_properties.json
在 includePath 下加入

"/usr/local/opencv/include/opencv4",
 "/usr/local/opencv/include"
#include "opencv2/opencv.hpp"

6.測試,寫一個opencv的demo

建立一個檔案showEagle.cpp
同級目錄下存一張雄鷹的圖片eagle.jpg
在這裡插入圖片描述
showEagle.cpp程式碼如下:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, char const *argv[])
{
        Mat src = imread("eagle.jpg");
        imshow("src", src);
        Mat src_gray;
        cvtColor(src, src_gray, COLOR_BGR2GRAY); // 注意,有的教程CV_BGR2GRAY,opencv4下會報錯
        imshow("src_gray", src_gray);
        imwrite("eagle_gray.jpg", src_gray);
        waitKey(0);
        return 0;

開始編譯

g++ showEagle.cpp -o showEagle `pkg-config --cflags --libs opencv4`

無限報錯報錯:error “OpenCV 4.x+ requires enabled C++11 support”
再來一次

g++ -std=c++11 showEagle.cpp -o showEagle `pkg-config --cflags --libs opencv4`

效果如下
在這裡插入圖片描述
在這裡插入圖片描述