解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记

2023-05-16

我们如果使用的ROS版本为Kinetic,那么ROS一般会默认安装OpenCV3。所以使用cv_bridge的情况下,ROS会自动去调用它自己安装的OpenCV3。但是对于一部分人还是比较习惯使用OpenCV2,所以需要对CMakeLists.txt文件进行修改或者修改ROS目录下的cv_bridge的配置文件,具体操作如下。

(1)第一种方法就是不使用cv_bridge包,在CMakeLists.txt文件中采用手动指定的方式找到自己安装的OpenCV。

首先找到OpenCV配置文件的路径,所谓的配置文件如下图:


然后在CMakeLists.txt文件下指定该文件的目录,指令如下。

set(OpenCV_DIR /usr/local/share/OpenCV)
再就是用find package指令找到OpenCV包。

find_package(OpenCV REQUIRED)
指定OpenCV的头文件目录

include_directories(
  ......
  ${OpenCV_INCLUDE_DIRS}
  ......
)
将编译生成的文件与OpenCV的动态库/静态库进行链接。

target_link_libraries(
   ......
   ${OpenCV_LIBS}
   ......
)
总体的CMakeLists.txt文件如下图所示。


进入工程运行catkin_make以后可看到OpenCV的版本已经切换完成。



(2)除了上面去掉cv_bridge手动指定路径外。还有一种方法就是修改cv_bridge的配置文件,使得cv_bridge去调用我们自己安装的OpenCV版本,具体方式如下。

首先打开终端并进入cv_bridge配置文件所在目录,并用gedit指令打开该配置文件。

$ cd /opt/ros/kinetic/share/cv_bridge/cmake/
$ sudo gedit cv_bridgeConfig.cmake

然后按ctrl+f,输入关键词include找到以下内容并按图中的方式进行修改。


将默认的OpenCV头文件目录替换后,再按ctrl+f并输入关键词libraries可以找到下图的区域,我们将其库文件也进行替换。


与头文件直接写入目录的方式不同,库文件是将文件本身也写入到配置文件中。而OpenCV的库文件有很多种,如下图所示。


所以我们通常都将core、highgui、imgproc等常用的库文件写入到配置文件中,万一遇到要用的函数的库文件没有包含在配置文件中只要手动添加就可以。

修改cv_bridge的配置文件结束后,我们只需要在工程的CMakeLists.txt文件中的find_package加入cv_bridge就能够使用自己安装的OpenCV版本。不需要再像(1)方法中那样手动指定路径,而且这样做的好处就是能够使用cv_bridge。因为该包在OpenCV图像与ROS图像之间的转换中会经常用到。


这时候再编译工程就可以通过了,但奇怪的是我们发现编译输出OpenCV的版本还是3.3.1并且配置文件还是默认的OpenCV3,如下图所示。


然后我在cv_bridge配置文件中输入message(STATUS "opencv version: ${OpenCV_VERSION}")来寻找哪条语句将OpenCV的版本号改回了ROS默认的版本。最终,在配置文件的最后几行的一条语句下面会出现版本号从Opencv 2.4.13变成Opencv 3.3.1。因此,该语句就是修改配置文件的路径的地方。然后,我用message找出修改OpenCV配置文件路径所在路径就知道了那个文件下面修改了OpenCV的配置文件,详细如下图所示。


然后在终端下面用gedit打开cv_bridge-extras.cmake文件,就发现它修改的地方了。


我们对该文件进行修改,把自己安装的OpenCV对应的目录输入到文件中,如下图所示:


再运行catkin_make编译工程就可以发现版本号回到了我们指定的版本号。当然,这只是对于显示设置而已,对于使用OpenCV没有太大的影响。

(3)还有一种方法就是cv_bridge与手动指定结合的方式。我们打开自己安装的OpenCV的配置文件可以发现该配置文件主要是用来设置一些OpenCV的相关信息,如下图所示。


然后我们只要在cv_bridge中导入OpenCV的配置文件,那么只要使用cv_bridge的包就可以在ROS中使用相关的OpenCV版本,如下图所示。


同样从配置文件中得到库函数目录的路径,如下图所示。


上面要注意的是在给系统赋予OpenCV头文件和库文件目录路径时,千万不要忘记把cv_bridge的头文件和库文件目录路径忘记赋给系统。最后把cv_bridge配置文件设置OpenCV参数的选项注释掉,如下图所示。



以后再遇到其他OpenCV与cv_bridge之间的兼容性问题,再补充。






















本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记 的相关文章

随机推荐

  • 分享一个Linux的录屏工具script

    在使用该命令后 xff0c 直接录屏 xff0c 会记录终端在命令行的所有动作 想让别人帮你操作 xff0c 但你的思路跟不上对方敲命令的速度 xff0c 可以先录下来 xff0c 然后回去慢慢琢磨 我的是centos7系统 span cl
  • 最佳Linux防病毒软件推荐!

    看到标题或许你会疑问 xff0c linux如此安全 xff0c 为什么我们还需要安装防病毒软件呢 确实 xff0c linux为全球超过70 的web服务器提供支持 xff0c 黑客极有动机来制造强大的病毒来渗透这些服务器安全系统 xff
  • NvidiaAGXXavier刷机Jetpack5.0.2报错记录(已解决,非搬运)

    网上有很多教程 xff0c 很详细的讲了这个板子刷机应该怎么去做 xff0c 正常的话就按照那个步骤走就可以了 xff0c 这里就不再赘述了 xff0c 但是我在给自己的NvidiaAgxXavier刷Jetpack5 0 2的时候 xff
  • Atmel Cortex-A5跑Nuttx是如此酸爽

    开源RTOS Nuttx已经支持Atmel SAMA5系列MPU xff0c 而且看到Nuttx还支持Graphic API xff0c 决定尝试在Ateml SAMA5D3 Xplained上跑下Nuttx Nuttx是一款开源RTOS
  • Using NuttX OS as a library on Atmel Studio 7

    This document explains how to add NuttX OS to your application on Atmel Studio 7 using NuttX OS as a library With Atmel
  • 【开发备忘】QGroundControl编译

    本文记录在windows下编译最新版QGC的过程 Qt版本为5 15 2 xff0c 编译器为MSVC2015 1 Qt环境配置 尽管目前已有Qt6 xff0c 但是QGC官网明确强调了仅可使用Qt 5 15 2 xff0c 因此首先需要安
  • Linux都应用在哪些领域?发展如何?

    与Windows操作系统软件一样 xff0c Linux也是一个操作系统软件 但与Windows不同的是 xff0c Linux是一套开放源代码程序的 xff0c 并可以自由传播的类UNIX操作系统软件 xff0c 随着信息技术的更新变化
  • opensuse 11.1 在线安装虚拟机 VirtualBox-2.2.4

    有些喜欢的windows软件可以用wine虚拟出来了 xff0c 比如酷狗 xff0c 但是有些就比较麻烦了 xff0c 比如中国特色的在线电影 xff0c 网银 xff0c 或许只有用虚拟机解决起来比较方面 xff0c 说句实在话 xff
  • Linux下CMakeLists.txt编译C++程序笔记

    在Linux下运用ROS系统可免去很多构建框架的步骤 xff0c 所以一般只要按照官网给的教程逐步进行即可 但是ROS自身有许多的毛病 xff0c 比如其稳定性和实时性差 xff0c 有时候数据传输会发现丢失的现象 xff0c 因此其性能不
  • px4: actuators control, control group 和 mixer科普

    原文链接 xff1a https pixhawk org dev mixing Control Mixing This page discusses the general purpose control mixing architectu
  • 如何用开源飞控PIXHAWK进行二次开发?

    著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 作者 xff1a 我是肉包子 链接 xff1a http www zhihu com question 38874663 answer 84239995 来源
  • px4的模式与状态

    一 模式 PX4 native flight stack String Description and notes MANUAL ACRO ALTCTL POSCTL OFFBOARD STABILIZED RATTITUDE in mas
  • ESP8266开发实战之(一)-开发环境配置

    最近买了一块ESP8266的小板子 xff0c 上面自带WIFI功能 xff0c 可以进行一些好玩的物联网开发 因此 xff0c 我打算将对整个板子的的熟悉过程通过一系列的文档记录下来 我拿到的板子型号是NodeMUC 1 0 ESP 12
  • ESP8266开发实战之(4)-连接路由器的wifi

    概述 ESP8266支持连接到wifi xff0c 从而使得我们能够通过网络访问 xff0c 做出一些简单而有趣的功能 因此 xff0c 第一步工作便是连接到wifi网络 一般情况下 xff0c 我们要连接wifi xff0c 在手机上的操
  • 怎样用一行代码判断系统的大小端?

    最近在设计自己的TCP IP协议栈 xff0c 代码完成的差不多了 xff0c 已经能够跑在嵌入式STM32开发板上 闲来无事 xff0c 想着优化一下问题的解决方案 这个问题据说是很常见的面试问题 xff1a 如何判断当前系统的大小端 x
  • 在操作系统开发中选bochs还是qemu

    最近有同学问我 xff1a 为什么你在写 0写x86 Linux操作系统时选择了bochs xff0c 而不是qemu xff1f 他认为bochs更加好用 xff0c 很多资料上都写了用该软件 其实我也是经过不断地对比和尝试后 xff0c
  • 网络编程中的大小端

    最近在录制一门手写TCP IP协议栈的课程 不得不说 xff0c TCP IP这个东西是真难 xff0c 写代码费了我半天劲 xff0c 然后又要用课程的方式给讲出现 这其中涉及到大小端的转换 xff0c 所以这里总结一下 在计算机领域 x
  • RTOS系统延时与普通软延时的特点与区别

    我们知道 xff0c 在RTOS中会提供若干延时函数的API 对于没有仔细了解过RTOS的同学而言 xff0c 可能会产生这样疑惑 xff1a 这些API与普通自写的延时函数相比究竟有何优势呢 xff1f 为什么要额外提供这些API xff
  • 超简单!在Keil中指定某个函数或变量存放的地址

    在我们开发过程中 xff0c 有时候会有这样一个需求 xff1a 希望能够指定某个函数或变量存放的地址 也许你看过一些文章 xff0c 里面介绍了一大堆内容 xff0c 甚至于还会介绍分散加载文件的配置 但是绝大多数情况下 xff0c 为了
  • 解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记

    我们如果使用的ROS版本为Kinetic xff0c 那么ROS一般会默认安装OpenCV3 所以使用cv bridge的情况下 xff0c ROS会自动去调用它自己安装的OpenCV3 但是对于一部分人还是比较习惯使用OpenCV2 xf