ubuntu系統編譯安裝OpenCV 4.4

zfb132發表於2021-04-05

內容轉載自我的部落格

前言

如果你只是想要使用C++或者Python語言來呼叫OpenCV,而且並不關心OpenCV是否為最新版本,那麼請直接按照如下程式碼:
sudo apt update && sudo apt install libopencv-dev python3-opencv
前者libopencv-dev是用於C++開發的庫(已經很老舊了)
後者python3-opencv是用於python3開發的庫,你可以在終端輸入
/usr/bin/python3 -c "import cv2;print(cv2.__version__)"來驗證python3-opencv是否安裝成功
/usr/bin/pip3 install opencv-contrib-python==3.4.2.17來安裝擴充套件功能(3.4.2版本以後的預編譯庫中都不會再加入non-free模組)

1. 下載原始碼

在官方網站下載最新原始碼(截止本文測試時,最新版本為4.4.0),如果需要使用SIFT演算法等擴充套件功能,下載opencv_contrib一起編譯:

例如,opencv 4.4原始碼解壓到當前目錄下,opencv_contrib 4.4也解壓到當前目錄下

2. 安裝各種依賴

按照如下步驟:

# 安裝系統依賴
sudo apt install build-essential cmake git libgtk2.0-dev \
                 pkg-config libavcodec-dev libavformat-dev libswscale-dev \
                 libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
                 libjasper-dev libdc1394-22-dev 
# 新增源以繼續安裝依賴libjasper
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
# 安裝系統依賴
sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \
                 libjasper-dev libdc1394-22-dev libsnappy-dev libboost-all-dev \
                 python3-dev python3-numpy ffmpeg cmake-qt-gui libopenblas-dev \
                 tesseract-ocr libtesseract-dev libprotobuf-dev libleveldb-dev \
                 libhdf5-serial-dev protobuf-compiler libatlas-base-dev \
                 libgflags-dev libgoogle-glog-dev liblmdb-dev libfaac-dev \
                 gfortran libgstreamer1.0-dev libatlas-base-dev libxvidcore-dev \
                 libpng-dev libopenexr-dev libtiff-dev libwebp-dev \
                 libmp3lame-dev libtheora-dev libvorbis-dev  \
                 libopencore-amrwb-dev x264 v4l-utils libgdk-pixbuf2.0-dev \
                 manpages-dev libopencore-amrnb-dev libgstreamer-plugins-base1.0-dev \
                 libqt5widgets5 libqt5gui5 libqt5dbus5 libqt5network5 libqt5core5a \
                 qtcreator qt5-default
# 修復可能安裝出錯的依賴
sudo apt install -f

3. 開始編譯安裝

按照以下步驟:

# 在opencv4.4原始碼解壓後的資料夾下面,建立編譯資料夾
mkdir build && cd build
# 配置編譯選項
# CMAKE_INSTALL_PREFIX 是最終OpenCV的安裝位置
# OPENCV_ENABLE_NONFREE 指示是否開啟Non-free的演算法
# OPENCV_EXTRA_MODULES_PATH 指示擴充套件演算法的原始碼資料夾
# WITH_CUDA 該選項需要確保自己已安裝顯示卡驅動和cuda
# 可以關注下命令的輸出,可以從中找到哪些模組沒有配置成功
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.4 \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D OPENCV_EXTRA_MODULES_PATH=/home/zfb/opencv_contrib-4.4.0/modules \
      -D OPENCV_GENERATE_PKGCONFIG=YES \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D WITH_CUDA=ON \
      -D BUILD_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D INSTALL_C_EXAMPLES=ON ..
# 開啟12個執行緒同時編譯原始碼
make -j12
# 安裝OpenCV到指定位置
sudo make install

4. 配置C++開發環境

按照以下步驟:

# 檢視該檔案是否存在(OPENCV_GENERATE_PKGCONFIG=YES引數保證此檔案存在)
cat /usr/local/opencv4/lib/pkgconfig/opencv4.pc
# 把上面的檔案新增到PKG_CONFIG_PATH
sudo vim /etc/profile.d/pkgconfig.sh
# 檔案內容如下
# export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH
# 啟用檔案
source /etc/profile
# 驗證配置,如果不報錯則說明正常
pkg-config --libs opencv4

5. 程式執行時載入動態庫*.so

按照以下步驟:

# 將OpenCV的庫新增到路徑
sudo vim /etc/ld.so.conf.d/opencv4.conf
# 新增內容如下(也可能是空檔案)
# /usr/local/opencv4.4/lib
# 更新配置
sudo ldconfig

6. 測試cpp檔案

按照以下步驟:

# 進入下載的opencv4.4的原始碼資料夾下的samples目錄
cd samples/cpp/example_cmake
# 配置編譯選項
cmake .
# 開始編譯檔案
make
# 執行測試程式碼,彈出視窗實時顯示攝像頭畫面
./opencv_example

7. 配置python3的opencv環境

首先需要找到編譯好的用於python3的動態庫檔案的位置,可以使用如下程式碼搜尋(其實在sudo make install時也會顯示):
sudo find / -iname "cv2*.so"
得到路徑為/usr/local/opencv4.4/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so
然後把它複製到對應python直譯器的/path/to/dist-packages(系統自帶的python直譯器)和/path/to/site-packages(使用者安裝的python直譯器)目錄下,之後就能在該python直譯器中使用python-opencv庫:

# 檢視系統Python環境的包路徑
/usr/bin/python3 -c "import pip;print(pip)"
# 建立軟連結使得/usr/bin/python3可以使用opencv
sudo ln -s /usr/local/opencv4.4/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/cv2.so
# 測試安裝結果
/usr/bin/python3 -c "import cv2;print(cv2.__version__)"

8. 解除安裝編譯安裝的OpenCV

  1. 進入編譯時的資料夾cd build
  2. 執行解除安裝命令sudo make uninstall,此命令會刪除安裝時新增的所有檔案,但是不處理資料夾
  3. 根據上一個命令的回顯,刪除目的資料夾的與該軟體有關的空資料夾

相關文章