根据README安装依赖
sudo apt install libeigen3-dev build-essential libopencv-contrib-dev
eigen3本来就安装过。。。执行这个指令不小心更新了,引起了版本冲突,后续恢复写在另一篇blog里面了
build-essential在源代码安装opencv的时候也安装过了
这个代码需要opencv-contrib,我在之前安装opencv的时候应该没装过,所以导致报错
因此需要先卸载原来的opencv,再重新安装opencv + opencv-contirb
参考
(超详细)Ubuntu18.04下安装及卸载opencv+opencv_contrib | AI技术聚合
Ubuntu 安装opencv及opencv_contrib模块_南苏月的博客-CSDN博客
Ubuntu18.04安装opencv和opencv_contrib(详细步骤及常见问题解决)_ubuntu18.04安装opencev4.22及opencv contr_清雨静韵的博客-CSDN博客
具体安装步骤及记录:
1.卸载
找到当初安装 opencv3.4.16的 build 目录,进入 build 目录
cd ~/opencv-3.4.16/build
sudo make uninstall
cd ..
sudo rm -rf build
清理 /usr 中所有 opencv 3.4.16(安装在/usr/local/目录)相关项
(ros-noetic自带opencv4,位于/usr/include/,/usr/share/等目录下,不删除这些内容)
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/local/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* /usr/local/share/licenses/opencv3
cd /usr/local
//发现搜不到有关opencv的任何文件,说明删干净了
find . -name "*opencv*"
2.opencv3.4.16和opencv_contrib3.4.16的安装
下载opencv-3.4.16和opencv_contrib-3.4.16的压缩包,解压缩,将opencv_contrib-3.4.16移动到opencv-3.4.16目录下面
进入opencv-3.4.16
cd opencv-3.4.16/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.16/modules
sudo make -j8
sudo make install
注:目录opencv_contrib-3.4.16需要和自己opencv下面opencv_contrib的目录名字一样
3.配置opencv环境
//打开opencv.conf
sudo -H gedit /etc/ld.so.conf.d/opencv.conf
//在末尾添加
/usr/local/lib
//保存后执行以下命令,确保配置生效
sudo ldconfig
//打开bash.bashrc
sudo -H gedit /etc/bash.bashrc
//在文末添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
//保存后执行以下命令,确保配置生效
sudo updatedb
使用sudo gedit打开文件非常慢,而且在保存的时候会出现警告
参考https://askubuntu.com/questions/1235728/saving-a-file-in-gedit-prints-a-warning-in-terminal
使用sudo -H gedit就没有上述问题了
4.测试
cd ~/opencv-4.1.2/samples/cpp/example_cmake
cmake .
make
./opencv_example
出现一个界面,显示Hello OpenCV,如果有摄像头会调用摄像头,没有摄像头就是黑色界面上显示Hello OpenCV
到这里opencv就安装完成啦!
以前安装opencv-3.4.16的时候还配置opencv3.4.16和cv_bridge的兼容性,由于兼容性的配置是在手动修改一些配置文件,而卸载opencv的过程不会修改这些配置文件,所以无需重新配置兼容性。