linux-mint20.03編譯opencv-3.4.11

在linux-mint20.03上編譯opencv-3.4.11

參考鏈接:https://www.yuque.com/docs/share/0fefb9de-9f4b-45e5-93c4-2af8f6289b6b#

Step I:下載源碼

從Github主頁即可下載對應版本:https://github.com/opencv/opencv

源碼下載完成並且解壓後,比如解壓文件夾名稱爲opencv-3.4.11-sourcecode,要在這個文件夾下新建一個文件夾,比如build,CMAKE需要在../opencv-3.4.11-sourcecode/build目錄下。

Step II: 下載依賴項

從官方文檔https://docs.opencv.org/3.4.11/d2/de6/tutorial_py_setup_in_ubuntu.html查看需要提前安裝的依賴項。

一定要先安裝依賴項,不然後面如果缺少依賴而導致報錯,就要推倒重來。

對於opencv-3.4.11,必須要有的依賴項:

sudo apt-get install cmake
sudo apt-get install gcc g++

# for python 2
sudo apt-get install python-dev python-numpy

# for python 3
sudo apt install python3-dev python3-numpy

這裏有關python2和python3,linux-mint20.03上python2.7和3.8都有,分別使用使用python2python3命令調用。在opencv的編譯過程中,如果你只需要python3,那麼可以忽略python2,那麼最後只會有一個python3的文件夾,也只能在python3中使用;如果兩個都配齊了,那會生成python2 python3兩個文件夾,2和3都能使用。

# GTK support
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

# support GTK 2
sudo apt install libgtk2.0-dev

# support GTK 3
sudo apt install libgtk-3-dev

可選依賴,主要是一些圖片格式

sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libtiff-dev
sudo apt-get install libwebp-dev

Step III: CMAKE

如果選擇默認位置安裝的話,參照上面的鏈接即可。如果不是有特殊需求,直接使用默認位置是最推薦的。下面的配置除了添加/lib庫之外,都不需要操作

自己選擇了位於Anaconda下的虛擬環境cv,python=3.8下構建,也需要提前在這個環境安裝python-dev, numpy兩個包;並且自己指定安裝位置。

../opencv-3.4.11-sourcecode/build目錄下進行CMAKE,注意,由於我們是虛擬環境,所以我們需要手動指定PYTHON等變量的位置:

cmake ../ -DWITH_CUDA=OFF -DCMAKE_INSTALL_PREFIX=/opt/opencv-3.4.11 \
-DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON \
-DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF \
-DPYTHON3_EXECUTABLE=/home/rypan/miniconda3/envs/cv/bin/python3.8 \
-DPYTHON_INCLUDE_DIR=/home/rypan/miniconda3/envs/cv/include/python3.8 \
-DPYTHON_LIBRARY=/home/rypan/miniconda3/envs/cv/lib/libpython3.8.so \
-DPYTHON3_NUMPY_INCLUDE_DIRS=/home/rypan/miniconda3/envs/cv/lib/python3.8/site-packages/numpy/core/include

-D CMAKE_INSTALL_PREFIX爲自己指定的安裝位置,-D是指定CMAKE參數時的前綴;其他參數的解釋:https://docs.opencv.org/3.4.11/d7/d9f/tutorial_linux_install.html

上面PYTHON的可執行路徑,庫位置,NUMPY位置等,可能每個人都不同,所以可以先在自己的路徑下找找看。

CMAKE執行完畢後,可以看看output結果,看看有無明顯的錯誤。

Step IV: MAKE

# 執行make編譯,-j8參數表示允許cpu並行編譯,最多允許8個線程,可以大大加速構建過程
# -j根據自己cpu核心數設定,6核可以設爲-j6~-j12
make -j8

# 安裝編譯好的可執行文件
sudo make install

完成後,自己選擇的安裝目錄是/opt/opencv-3.4.11,可以查看一下這個目錄下應該有三個文件夾bin/ lib/ share/

Step V: 設置掃描路徑和環境變量

由於是自定義位置安裝,所以我們需要手動配置從而讓系統識別。

通過/usr/bin/下的pkg-config命令,會掃描所有系統/usr/lib/下和環境變量PKG_CONFIG_PATH所定義的所有pkgconfig文件夾,這些文件夾都是存放各個程序編譯信息.pc文件,pkg-config掃描後,這些.pc文件保存的編譯信息就能被其他項目/程序獲取。(.pc文件主要定義了安裝程序的主目錄prefix、可執行程序目錄exec_prefix、lib目錄libdir、包含目錄includedir、sharedlibdir等,有點類似於環境變量,不過更多是爲了程序編譯服務的)

這時,有兩種方法:1. 把編譯生成的opencv.pc放到系統的PKG-CONFIG文件夾下;2. 把生成的opencv.pc文件的路徑添加到PKG-CONFIG-PATH

METHOD 1

$ whereis pkg-config
pkg-config: /usr/bin/pkg-config /usr/lib/pkg-config.multiarch /usr/share/man/man1/pkg-config.1.gz

$ whereis pkgconfig
pkgconfig: /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/pkgconfig /usr/share/pkgconfig

$ pkg-config --variable pc_path pkg-config
/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig

理論上可以將opencv.pc複製到任意一個pkg-config --variable pc_path pkg-config 列出的pkgconfig文件夾中。經過實驗,在上面的路徑中,/usr/lib/pkgconfig,/usr/lib/x86_64-linux-gnu/pkgconfig等都可以,我們編譯生成的opencv.pc文件在/opt/opencv-3.4.11/下。原文中說:不過最好複製到/usr/local/lib/pkgconfig/下,這個自己沒有實驗過。

Ubuntu18.04安裝後,系統自帶了opencv3.2.0,默認將opencv.pc存放在/usr/lib/x86_64-linux-gnu/pkgconfig/下,如果需要將opencv.pc複製到這裏,可以先將系統自帶的opencv.pc備份下,然後再cp過去。

METHOD 2

#修改bash.bashrc文件
sudo vim /etc/bash.bashrc
# 在最後加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/opencv-3.4.11/lib/pkgconfig
export PKG_CONFIG_PATH

# 使生效
source /etc/bash.bashrc
#查看變量是否生效
echo $PKG_CONFIG_PATH

Step VI: 設置環境變量

自定義位置編譯時,可能會出現一種情況,編譯成功安裝成功,OpenCV的c++demo也可以正常運行,但是進入python環境import cv2時會發現找不到包。因爲自定義編譯時,生成的cv2模塊路徑是:/OPENCV_DIR_PATH/lib/python3.8/site-packages
需要將此路徑設置加入環境變量PYTHONPATH中,以便於python環境中import時可以找到cv2。

# 新增PYTHONPATH環境變量
sudo vim ~/.bashrc
# 在後面加入
export PYTHONPATH=$PYTHONPATH:/opt/opencv-3.4.11/lib/python3.8/site-packages

source ~/.bashrc

Step VII: 配置lib/路徑

將opencv的lib路徑添加到配置,能被系統掃描到,有什麼用?其他項目,如darknet構建時需要用到opencv的lib,就可以直接引用到。

sudo vim /etc/ld.so.conf.d/opencv.conf
# 添加opencv的lib位置
/opt/opencv-3.4.11/lib

# 刷新lib庫目錄
sudo ldconfig
# 刷新目錄緩存
sudo /sbin/ldconfig

Step VIII: 驗證

通過版本號驗證

$ pkg-config opencv --modversion

# python
>>import cv2 as cv
>>cv.__version__

編譯C++ DEMO

cd opencv-3.4.11/samples/cpp/example_cmake
cmake .
make
./opencv_example

效果圖

Step IX: 卸載

直接在CMAKE的build目錄下,sudo make uninstall,將opencv相關的可執行文件、lib文件等從安裝位置刪除,不過還是會留空下文件夾,需要手動刪除。

可以繼續執行:sudo make clean將源碼包內的編譯相關文件刪除、最後在build文件夾內執行sudo rm rf *刪除源碼包內所有文件

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