內容轉載自我的博客
前言
如果你只是想要使用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
一起編譯:
- 下載適用於linux的opencv源碼的zip壓縮文件並解壓
- 下載opencv_contrib源碼的zip壓縮文件並解壓
例如,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
- 進入編譯時的文件夾
cd build
- 執行卸載命令
sudo make uninstall
,此命令會刪除安裝時添加的所有文件,但是不處理文件夾 - 根據上一個命令的回顯,刪除目的文件夾的與該軟件有關的空文件夾