OpenCV4.4.0 安裝測試 Installation & Examination (Ubuntu18.04, Ubuntu 20.04)
下載 dependencies
安裝 OpenCV4.4
需要一些准備工作(不包含 python),首先要做的是下載它的一些 dependency(來自 Ubuntu 20.04 從源碼編譯並配置OpenCV 4.4.0 以及 python 3.8 支持):
# If you don't have cmake:
# sudo apt-get install cmake
sudo apt-get install libswscale-dev libtiff5-dev libgtk2.0-dev pkg-config
sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
# If need to support python3:
# sudo apt install python3-dev python3-numpy
# If need ffmpeg:
sudo apt install ffmpeg
如果安裝成功了就不用看下面這些了,但是我遇到了各種問題:
意外Ⅰ.依賴損壞導致的 apt-get 中 Unmet dependencies 問題
可能系統由於之前某(幾)次 apt-get upgrade
過程中斷,導致依賴損壞;安裝新的包時,提示Unmet dependencies,解決方案來源於如何解決 apt-get 中 Unmet dependencies 問題,這個時候可以嘗試去根據提示信息,運行 apt-get -f install
來修復問題就解決了。
簡單來說,就是先執行上述修復命令,然后更新升級一下確保沒留什么隱患:
sudo apt --fix-broken install
sudo apt-get update
sudo apt-get upgrade
如果網絡不好,你可以運行多次這些命令,下到一半的包(據我所知)是可以接着前面繼續下載的... ...
意外Ⅱ.Ubuntu18.04+上找不到 libpng12.0 的問題
在上面安裝包的時候發生報錯類似於 Package libpng12-0 is not installed
,而且無論如何掙扎,網有多好都裝不上這個東西,解決方案來自修復了在 Ubuntu 18.04、19.10、20.04 上找不到的 libpng12-0,據說這已經不是個新的問題了,只是用戶升級到更高版本如18.04,19.10,20.04后,“libpng12
不再在Ubuntu存儲庫檔案中可用,從而導致新的 libpng(libpng16
)庫安裝失敗。”
這里是 Ubuntu20.04、19.10 或 19.04 上的問題的解決方案,可以使用使用更新的libpng12-0軟件包創建的 PPA 安裝 libpng。添加 PPA 並使用以下命令安裝 libpng12-0(手動安裝、18.04/Linux Mint 19 的解決方案以及其它問題見前面的鏈接):
sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0
成功后,PPA 版本中不再發生上述錯誤。
意外Ⅲ.Ubuntu20.04+ 系統遇到的 Can not locate package "libjasper-dev"
如果報錯 Can not locate package "libjasper-dev"
,八成是網絡差造成的,解決方案為添加一下下面這個源:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
然后重新 install 一下 libjasper-dev
相關的庫大概就可以了。
安裝&編譯
生成 Makefile
注意上面的都務必先安裝成功,然后輸入如下命令構建 Makefile:
cd opencv-4.4.0
mkdir build
cd build
cmake \
-D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/optic_css/opencv-4.4.0/opencv_contrib-4.4.0/modules/ \
-D BUILD_opencv_world=YES \
-D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=OFF \
-D WITH_OPENGL=ON -D WITH_EIGEN=ON \
-D BUILD_EXAMPLES=ON -D BUILD_DOCS=ON \
..
上面的cmake
命令中有幾點需要注明的:
CMAKE_BUILD_TYPE
一定要設置成Release
的;CMAKE_INSTALL_PREFIX
要寫成你自己想要安裝的路徑,不寫的話默認是/usr/local
的include/
,bin/
,lib/
3個文件夾下;- 由於4.0以后的版本不再有默認設置的
opencv4.pc
文件,在這里要記得手動設置下OPENCV_GENERATE_PKGCONFIG
是開着的來支持pkg-config功能; OPENCV_ENABLE_NONFREE
開啟后會允許使用已申請專利的算法們,還是值得打開一下的;OPENCV_EXTRA_MODULES_PATH
填寫contrib
庫的位置,我的contrib
源文件放在了opencv-4.4.0
的文件夾下,按理說可以放在任何位置,最好弄得和我一樣叭;BUILD_opencv_world
作為綜合所有頭文件的東西,還是打上勾;- 這里把關於
python
方面的編譯都給關掉了; - 為了使用相關的
example
和doc
,把這兩個對應的開關打開;
意外Ⅳ. Makefile生成時卡在了ippicv的下載上
在 cmake ..
命令運行時,卡在了(基本是因為網太差,或者是網址被 ban 了):
IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz
解決方案參考了OpenCV 中手動安裝 ippicv(ubuntu),具體來說,采取的是先找到下載這個東西的網址,然后進入網址手動下載后放在XXX路徑,去文件里面手動改一下下載路徑到本地路徑即可。
下載 ippcv 文件的網址被放在了 opencv-x.x.x\3rdparty\ippicv\ippicv.cmake
文件中,打開文件,找到下面這三部分語句:
# Commit SHA in the opencv_3rdparty repo
set(IPPICV_COMMIT "a56b6ac6f030c312b2dce17430eef13aed9af274")
################################################################################################
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
################################################################################################
if(X86_64)
set(OPENCV_ICV_NAME "ippicv_2020_lnx_intel64_20191018_general.tgz")
set(OPENCV_ICV_HASH "7421de0095c7a39162ae13a6098782f9")
提取一下紅色字符串里面的信息,得到目標文件的下載網址為 https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz,下載得到 ippicv_2020_lnx_intel64_20191018_general.tgz
,把文件放在一個你喜歡的位置,我放在了 file:/home/optic_css/opencv-4.4.0
(如果不能下載,移步 ubuntu 安裝 opencv 無法下載 IPPICV 的問題ippicv_2020_lnx_intel64_20191018_general.tgz)。這樣之后再把以前的文件中的網址改成本地地址就好了,也就是說,把 ippicv.cmake
文件中的:
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
改成你的本地下載地址:
"${OPENCV_IPPICV_URL}"
"$ENV{OPENCV_IPPICV_URL}"
"file:/home/optic_css/opencv-4.4.0"
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
意外Ⅴ. Makefile生成后發現有未能下載的文件
發現有下面這些文件在 cmake
的時候沒有下載下來(你可以在 build/CMakeDownloadLog.txt
中查看,查找 #cmake_download
,在其后首先列出的是文件名,接着是下載地址):
-
"/home/optic_css/opencv-4.4.0/.cache/ade/b624b995ec9c439cbc2e9e6ee940d3a2-v0.1.1f.zip" "https://github.com/opencv/ade/archive/v0.1.1f.zip"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/boostdesc/0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i"
-
"/home/optic_css/opencv-4.4.0/.cache/xfeatures2d/vgg/151805e03568c9f490a5e3a872777b75-vgg_generated_120.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i"
於是手動一個一個地把它們下載下來,放在路徑 /opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/src/
下就可以了,不用再次生成 Makefile。
編譯(未在編譯中遇到除了時間長以外的任何問題)
有在編譯中遇到問題的可以看 Ubuntu18.04+Opencv4.4.0+contrib 詳細配置過程或者自己去網上查。
生成好 Makefile 之后就可以直接編譯、下載了(先看一下電腦有幾個核,考慮多線程編譯叭,不然直接慢die):
make -j8
sudo make install
開了八個線程之后的結果就是等了將近一個小時,編譯成功輸出的東西是下面這一坨:[OpenCV4.4.0 Compiling Output](2020. Oct. OpenCV4.4.0_Compiling_Output_optics_css@qq.com.txt),雖然基本看不懂里面那些庫都是啥,但是仍然很有成就感?
OpenCV4.4.0的環境配置
添加/usr/local/lib作為程序執行時共享庫*.so的路徑
在 /etc/ld.so.conf.d/opencv4.conf
中(如果沒有就自己新建一個)寫入 /usr/local/lib
,用 nano
打開這個文件並修改:
sudo nano /etc/ld.so.conf.d/opencv4.conf
沒有的話就直接新建,然后寫入這個內容:
# libc default configuration
/usr/local/lib
保存(似乎是 Ctrl+X,然后 Y 確認寫入 Buffer,然后 Enter 確認要把文件命名為默認),然后更新一下配置:
sudo ldconfig
配置pkg-config環境到bash.bashrc
向上面一樣,nano
打開 /etc/bash.bashrc
:
sudo nano /etc/bash.bashrc
然后在文件內容的末尾加上這些:
# Add in the end
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存,然后激活一下:
source /etc/bash.bashrc
sudo updatedb
寫/usr/local/lib到ld.so.conf
有時會報錯 error while loading shared libraries: libopencv_core.so.*
,因此無論如何也應該加一句 /usr/local/lib
到 /etc/ld.so.conf
,不贅述,直接進入然后加上這一句就好了:
sudo nano /etc/ld.so.conf
保存,然后更新一下:
sudo ldconfig
檢測OpenCV4.4.0安裝成功
這樣就算是安裝完成了,就算你運行:
pkg-config --modversion opencv
然后告訴你找不到這個包也無所謂,因為我們安裝的是新版本,要運行與檢測的是:
pkg-config --modversion opencv4
輸出,如果不行的話就有必要去看看 Package opencv was not found in the pkg-config search path:
root@LAPTOP-3SQ4QCQT:/home/optic_css# pkg-config --modversion opencv4
>> 4.4.0
就算是成功了,進一步還可以運行如下指令,試一下代碼是否能跑出來:
cd /mnt/c/Users/a1020/Desktop/Reinforcement_ELyou/Demolist/slamdemo/slambook/ch6
mkdir build
cd build
cmake ..
make -j8
[0.0] 面號:[OPTSxNaN]
Too basic to have NN... ...