之前在ubuntu20.04系统上已经安装了opencv4.5.5和扩展库opencv_contrib4.5.5,但是最近需要跑一下PL-SLAM的源代码,而PL-SLAM系统是基于opencv3.x.x开发的,直接运行会出现很多opencv版本不兼容的问题。因此想再安装opencv3.4.5和扩展库opencv_contrib3.4.5,过程中出现了很多问题,写这篇文章记录一下。
一、下载和安装依赖包
1、首先更新 apt-get,在安装前最好先更新一下系统,不然有可能会安装失败。在终端输入:
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解压(提取),放在一个文件夹下,如下图所示:
2、双击进入解压出来的opencv-3.4.5文件夹,右键打开终端(或者在别处打开终端,通过输入cd opencv-3.4.5进入当前目录下),然后依次输入(不要忘了第三行的最后的空格和两个点):
mkdir build
cd build
cmake-gui ..
3、然后会弹出CMake的图形化界面,在上方的两个路径里面,选择好代码所在文件夹的路径和要安装的路径:
4、点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish:
5、需要下载一些文件,要等待一段时间。可能由于网络原因下载失败,导致boostdesc_bgm.i等文件缺失,因此要手动下载缺失的文件,然后将以下文件:
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、再次点击左下方的Configure按钮,然后CMake即载入默认配置,这里通过图形界面的方式来进行配置,更加直观方便。
这里需要对三个地方进行修改:
(1)在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变(如果已经存在就不必修改)。
(2)下方的CMAKE_INSTALL_PREFIX显示了默认的安装目录,默认安装到usr/local目录下,生成makefile文件最后执行 make install时就会安装到这个目录。但是由于之前已经安装了opencv4.5.5,如果不修改默认路径会将之前的opencv4.5.5覆盖掉,因此在~/opencv3.4.5/opencv-3.4.5/build文件夹下新建一个installed文件夹,并将opencv3.4.5安装到此路径下。
修改CMAKE_INSTALL_PREFIX的默认安装目录为~/opencv3.4.5/opencv-3.4.5/build/installed
(3)在OPENCV_EXTRA_MODULES_PATH处,选择opencv_contrib3.4.5扩展库的输入目录(单击这一行后方空白处即可选中)然后选择opencv_contrib-3.2.0文件夹中的modules文件夹,注意,不是只选中opencv_contrib-3.2.0文件夹就好了,需要选中里面的modules文件夹! 如下图所示,然后点Choose。
注:OPENCV_EXTRA_MODULES_PATH 是用来指定要编译的扩展模块,其中包括OpenCV_contrib模块。
7、点击Generate生成配置文件,这一步应该比较快就完成了。
8、接着,在build目录下打开终端,输入:
make -j4
此时报错:
原因是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
三、配置环境变量
1、安装成功后还需要设置opencv的环境变量。打开文件:
sudo gedit /etc/ld.so.conf.d/opencv.conf
2、将opencv3.4.5库文件的路径添加到环境变量中,将以下内容添加到最后::
/home/xqs/3rdparty/opencv3.4.5/opencv-3.4.5/build/installed/lib
3、接下来配置库:
sudo ldconfig
4、更改环境变量:
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中注释掉增加的内容,然后source ~/.bashrc
即可。
四、多版本opencv的切换
如果只有一个版本的OpenCV,在CMakeList.txt中使用以下语句即可。在OpenCV编译好后,所在目录中会生成OpenCVConfig.cmake文件,这个文件中指定了CMake要去哪里找OpenCV,其.h文件在哪里等。 这种情况适用于只有一个版本的opencv,安装在默认路径下,一般是/usr/local/lib下,比如我的opencv4.4.5, 因为安装的时候如果不指定prefix路径,那么在make install 时会将所有的 .so 文件安装在 /usr/local/lib 下,所有的头文件安装在/usr/include下。
FIND_PACKAGE(OpenCV REQUIRED)
但是这里我们对opencv3.4.5的安装指定了路径,所以,如果想要使用opencv3.4.5,则需要在find_package之前设定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 其实寻找的是OpenCVConfig.cmake文件,打开这个文件就能看到当前opencv所对应的版本,同时也对一些路径进行了定义,类似于c++中的宏的感觉,尤其是:OpenCV_LIBS OpenCV_INCLUDE_DIRS 两个路径,这就保证了cmake可以正常找到opencv所需要的头文件和库文件;
因此也就有了第三种包含opencv的方法,就是直接设定这两个路径,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只有一个库文件在"/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、解压文章来源:https://www.toymoban.com/news/detail-478280.html
tar -zxvf ceres-solver-1.14.0.tar.gz
4、编译安装ceres文章来源地址https://www.toymoban.com/news/detail-478280.html
sudo mkdir build
cd build
sudo cmake ..
sudo make -j4
sudo make install
到了这里,关于ubuntu20.04下多版本opencv共存和切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!