TX2开发板Ubuntu18.04+ROS系统切换OpenCV版本

目录

序言

一、删除原来的OpenCV4

二、安装理想版本的OpenCV

1.下载安装包

2.安装依赖库

3.编译安装

4.配置环境

三、更新cv_bridge(最重要的一步)

1.卸载旧版本cv_bridge

2.下载ros版本对应的新的cv_bridge安装包

3.修改 cv_bridge中的cmakelists.txt

4.编译

5.修改开源代码

四.总结


序言

在TX2开发板上编译VINS-Fusion的时候,开始报了很多错误,比如:

error: ‘CV_RGB2GRAY’ was not declared in this scope

 搜索之后发现原来是我的系统安装的OpenCV版本为4.1.0,而Vins-Fusion代码依赖的是OpenCV版本需要3.x.x版本,其实如果只是想编译成功源码,我们只需要将opencv3的关键字改成opencv4的格式,可以参考这篇文章。但是这种方法并不是我追求的一劳永逸,而且后患不穷,于是我翻遍了百度和CSDN,终于成功切换了版本。

一、删除原来的OpenCV4

找到安装包:

cd build
sudo make uninstall
cd ..
sudo rm -r build

可以在/usr/local文件夹下手动删除相关文件,保证卸载干净,使用

pkg-config --modversion opencv

如果显示找不到包或者是ros自带的3.2版本,就说明卸载成功。

二、安装理想版本的OpenCV

1.下载安装包

wget https://github.com/opencv/opencv/archive/3.3.1.zip

2.安装依赖库

sudo apt-get upgrade
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3.5-dev
sudo apt-get install ffmpeg

3.编译安装

cd opencv-3.3.1
mkdir build
cd build
  cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local  ..
sudo make -j4
sudo make install

4.配置环境

sudo gedit /etc/ld.so.conf.d/opencv.conf

在打开的(空白)文件中加入:“/usr/local/lib”

更新共享连接库

sudo ldconfig
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

检查版本号是否为3.3.1。

三、更新cv_bridge(最重要的一步)

因为ROS自带一个3.2.0版本的OpenCV,需要cv_bridge将自己安装的版本与ros系统进行链接。

一种方法是直接修改,网上大多数经验都是让你找到cv_bridge的cmake文件,修改opencv新版本的路径,这种方法治标不治本,编译的时候还会有警告:“加载共享库时出错:libopencv_imgcodecs.so.3.2:无法打开共享对象文件:没有这样的文件或目录”,导致编译成功但是无法正常运行。究其原因,是因为在安装ROS时,cv_bridge默认连接了ros自带版本的opencv进行编译。只修改cvbridgeConfig.cmake中opencv的路径,编译可能没问题,但在代码执行时如果引用到libcv_bridge.so,还是会链接到opencv原来的版本。

正确的做法是删除旧的cv_bridge,重新安装编译新的cv_bridge。

1.卸载旧版本cv_bridge

sudo apt-get remove ros-melodic-cv-bridge

2.下载ros版本对应的新的cv_bridge安装包

新建一个工作空间,在src目录下使用命令下载安装包

git clone https://github.com/ros-perception/vision_opencv/tree/melodic 

 或者在浏览器进入Github网站下载源码的压缩包,解压下来。

https://link.zhihu.com/?target=https%3A//github.com/ros-perception/vision_opencvicon-default.png?t=N7T8https://link.zhihu.com/?target=https%3A//github.com/ros-perception/vision_opencv

3.修改 cv_bridge中的cmakelists.txt

find_package(OpenCV 3.3.1 REQUIRED) //改成你安装的opencv的版本

4.编译

在cv_bridge文件夹下

mkdir build
cd build
cmake ..
make
sudo make install

5.修改开源代码

在开源代码需要的cmaklist.txt中添加cv_bridge的cmake路径

set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  //在find_package前面

比如,在vinsfusion开源SLAM代码中,只需要在loop_fusion和vins_estimator两个子模块的cmakelist.txt开头添加set,即可完美编译通过。

四.总结

总之,在更换OpenCV版本的时候,不要忘记要更新cv_bridge的版本,重新链接起来,否则虽然显示版本号为新安装的版本,但是编译项目时,cmake会自动选择ros自带的版本,导致编译失败。

  • 38
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值