Ubuntu系統 OpenCV4.2.0安裝
官方釋出版本:
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`
效果如下