之前在ubuntu20.04系統(tǒng)上已經(jīng)安裝了opencv4.5.5和擴(kuò)展庫opencv_contrib4.5.5,但是最近需要跑一下PL-SLAM的源代碼,而PL-SLAM系統(tǒng)是基于opencv3.x.x開發(fā)的,直接運(yùn)行會(huì)出現(xiàn)很多opencv版本不兼容的問題。因此想再安裝opencv3.4.5和擴(kuò)展庫opencv_contrib3.4.5,過程中出現(xiàn)了很多問題,寫這篇文章記錄一下。
一、下載和安裝依賴包
1、首先更新 apt-get,在安裝前最好先更新一下系統(tǒng),不然有可能會(huì)安裝失敗。在終端輸入:
sudo apt-get update
sudo apt-get upgrade
2、接著安裝官方給的opencv依賴包,在終端輸入:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
二、下載opencv3.4.5和opencv_contrib3.4.5源碼壓縮包
1、opencv3.4.5的下載地址:
https://github.com/opencv/opencv/releases
2、opencv_contrib3.4.5的下載地址:
https://github.com/opencv/opencv_contrib/tree/3.4.5
三、配置opencv
1、將OpenCV3.4.5和OpenCV_contrib3.4.5解壓(提?。旁谝粋€(gè)文件夾下,如下圖所示:2、雙擊進(jìn)入解壓出來的opencv-3.4.5文件夾,右鍵打開終端(或者在別處打開終端,通過輸入cd opencv-3.4.5進(jìn)入當(dāng)前目錄下),然后依次輸入(不要忘了第三行的最后的空格和兩個(gè)點(diǎn)):
mkdir build
cd build
cmake-gui ..
3、然后會(huì)彈出CMake的圖形化界面,在上方的兩個(gè)路徑里面,選擇好代碼所在文件夾的路徑和要安裝的路徑:
4、點(diǎn)擊左下方的Configure按鈕,選擇Unix Makefiles,選擇Use default native compilers(默認(rèn)),然后點(diǎn)擊Finish:
5、需要下載一些文件,要等待一段時(shí)間。可能由于網(wǎng)絡(luò)原因下載失敗,導(dǎo)致boostdesc_bgm.i等文件缺失,因此要手動(dòng)下載缺失的文件,然后將以下文件:
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
拷貝到opencv_contrib/modules/xfeatures2d/src/目錄下,如圖:百度云鏈接:https://pan.baidu.com/s/1BeYF8kqEZLAJYQj-MvxpmA
提取碼:e1wc
6、再次點(diǎn)擊左下方的Configure按鈕,然后CMake即載入默認(rèn)配置,這里通過圖形界面的方式來進(jìn)行配置,更加直觀方便。
這里需要對三個(gè)地方進(jìn)行修改:
(1)在CMAKE_BUILD_TYPE 值處輸入RELEASE,其他保持不變(如果已經(jīng)存在就不必修改)。
(2)下方的CMAKE_INSTALL_PREFIX顯示了默認(rèn)的安裝目錄,默認(rèn)安裝到usr/local目錄下,生成makefile文件最后執(zhí)行 make install時(shí)就會(huì)安裝到這個(gè)目錄。但是由于之前已經(jīng)安裝了opencv4.5.5,如果不修改默認(rèn)路徑會(huì)將之前的opencv4.5.5覆蓋掉,因此在~/opencv3.4.5/opencv-3.4.5/build文件夾下新建一個(gè)installed文件夾,并將opencv3.4.5安裝到此路徑下。修改CMAKE_INSTALL_PREFIX的默認(rèn)安裝目錄為~/opencv3.4.5/opencv-3.4.5/build/installed
(3)在OPENCV_EXTRA_MODULES_PATH處,選擇opencv_contrib3.4.5擴(kuò)展庫的輸入目錄(單擊這一行后方空白處即可選中)然后選擇opencv_contrib-3.2.0文件夾中的modules文件夾,注意,不是只選中opencv_contrib-3.2.0文件夾就好了,需要選中里面的modules文件夾! 如下圖所示,然后點(diǎn)Choose。
注:OPENCV_EXTRA_MODULES_PATH 是用來指定要編譯的擴(kuò)展模塊,其中包括OpenCV_contrib模塊。
7、點(diǎn)擊Generate生成配置文件,這一步應(yīng)該比較快就完成了。
8、接著,在build目錄下打開終端,輸入:
make -j4
此時(shí)報(bào)錯(cuò):
原因是ceres版本過高與opencv3.4.5不兼容,原來安裝的版本是ceres2.2.0,因此再重新安裝ceres1.14.0,并像之前步驟那樣使用cmake-gui命令修改ceres1.14.0的安裝路徑使其不覆蓋原來的ceres。如果不想那么麻煩,可以卸載原有的ceres重新安裝。
重新安裝ceres后,重新按照上述步驟配置opencv,然后在build目錄下打開終端,輸入:
make -j4
編譯成功之后,再輸入
sudo make install
之后便能成功安裝opencv3.4.5。
參考博客:https://blog.csdn.net/jindunwan7388/article/details/80397700
三、配置環(huán)境變量
1、安裝成功后還需要設(shè)置opencv的環(huán)境變量。打開文件:
sudo gedit /etc/ld.so.conf.d/opencv.conf
2、將opencv3.4.5庫文件的路徑添加到環(huán)境變量中,將以下內(nèi)容添加到最后::
/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed/lib
3、接下來配置庫:
sudo ldconfig
4、更改環(huán)境變量:
sudo gedit /etc/bash.bashrc
5、在文件后添加:
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed/lib/pkgconfig
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed/lib
6、更新~/.bashrc
source ~/.bashrc
7、查詢OpenCV版本
pkg-config --modversion opencv
如果輸出3.4.5
,就表明配置成功。
如果想使用之前的版本,在~/.bashrc中注釋掉增加的內(nèi)容,然后source ~/.bashrc
即可。
四、多版本opencv的切換
如果只有一個(gè)版本的OpenCV,在CMakeList.txt中使用以下語句即可。在OpenCV編譯好后,所在目錄中會(huì)生成OpenCVConfig.cmake文件,這個(gè)文件中指定了CMake要去哪里找OpenCV,其.h文件在哪里等。 這種情況適用于只有一個(gè)版本的opencv,安裝在默認(rèn)路徑下,一般是/usr/local/lib下,比如我的opencv4.4.5, 因?yàn)榘惭b的時(shí)候如果不指定prefix路徑,那么在make install 時(shí)會(huì)將所有的 .so 文件安裝在 /usr/local/lib 下,所有的頭文件安裝在/usr/include下。
FIND_PACKAGE(OpenCV REQUIRED)
但是這里我們對opencv3.4.5的安裝指定了路徑,所以,如果想要使用opencv3.4.5,則需要在find_package之前設(shè)定cmake的查找路徑,也就是讓cmake去"/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed"
找opencv;
set(CMAKE_PREFIX_PATH "/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed")
這里需要贅述的是,find_package 其實(shí)尋找的是OpenCVConfig.cmake文件,打開這個(gè)文件就能看到當(dāng)前opencv所對應(yīng)的版本,同時(shí)也對一些路徑進(jìn)行了定義,類似于c++中的宏的感覺,尤其是:OpenCV_LIBS OpenCV_INCLUDE_DIRS 兩個(gè)路徑,這就保證了cmake可以正常找到opencv所需要的頭文件和庫文件;
因此也就有了第三種包含opencv的方法,就是直接設(shè)定這兩個(gè)路徑,OpenCVConfig.cmake文件的路徑為/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed/share/OpenC
set(OpenCV_DIR "/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed/share/OpenCV")
find_package(OpenCV 3.4.5 REQUIRED COMPONENTS core highgui imgproc flann calib3d)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
參考博客:https://blog.csdn.net/qq_25458977/article/details/103931360
五、卸載ceres
Ceres只有一個(gè)庫文件在"/usr/local/lib"中,并且所有頭文件都在"/usr/local/include/ceres"中
sudo rm -r /usr/local/lib/cmake/Ceres
sudo rm -r /usr/local/include/ceres /usr/local/lib/libceres.a
六、安裝Ceres
1、 安裝依賴庫:
sudo apt-get install liblapack-dev libsuitesparse-dev libgflags-dev
sudo apt-get install libgoogle-glog-dev libgtest-dev
sudo apt-get install libcxsparse3
2、下載ceres-solver-1.14.0
wget ceres-solver.org/ceres-solver-1.14.0.tar.gz
3、解壓文章來源:http://www.zghlxwxcb.cn/news/detail-478280.html
tar -zxvf ceres-solver-1.14.0.tar.gz
4、編譯安裝ceres文章來源地址http://www.zghlxwxcb.cn/news/detail-478280.html
sudo mkdir build
cd build
sudo cmake ..
sudo make -j4
sudo make install
到了這里,關(guān)于ubuntu20.04下多版本opencv共存和切換的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!