解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记
2018-01-18 12:57
1506 查看
我们如果使用的ROS版本为Kinetic,那么ROS一般会默认安装OpenCV3。所以使用cv_bridge的情况下,ROS会自动去调用它自己安装的OpenCV3。但是对于一部分人还是比较习惯使用OpenCV2,所以需要对CMakeLists.txt文件进行修改或者修改ROS目录下的cv_bridge的配置文件,具体操作如下。
(1)第一种方法就是不使用cv_bridge包,在CMakeLists.txt文件中采用手动指定的方式找到自己安装的OpenCV。
首先找到OpenCV配置文件的路径,所谓的配置文件如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/f959d246555e8429f20508eeda916eeb)
然后在CMakeLists.txt文件下指定该文件的目录,指令如下。
再就是用find package指令找到OpenCV包。
指定OpenCV的头文件目录
将编译生成的文件与OpenCV的动态库/静态库进行链接。
总体的CMakeLists.txt文件如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/a408513482d8ae1a5e7580010108d4d7)
进入工程运行catkin_make以后可看到OpenCV的版本已经切换完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/af76b22a371dbbe0bb951e015c34ca13)
(2)除了上面去掉cv_bridge手动指定路径外。还有一种方法就是修改cv_bridge的配置文件,使得cv_bridge去调用我们自己安装的OpenCV版本,具体方式如下。
首先打开终端并进入cv_bridge配置文件所在目录,并用gedit指令打开该配置文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/f1dad3b0f66be8bdfdf9e79d74e2bff1)
然后按ctrl+f,输入关键词include找到以下内容并按图中的方式进行修改。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/128a420f366748e9e749aedc6b9a2aed)
将默认的OpenCV头文件目录替换后,再按ctrl+f并输入关键词libraries可以找到下图的区域,我们将其库文件也进行替换。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/72763ea314ca711500481eb1c270e8d7)
与头文件直接写入目录的方式不同,库文件是将文件本身也写入到配置文件中。而OpenCV的库文件有很多种,如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/e86a60ce839bfd63623bef92bd59afa5)
所以我们通常都将core、highgui、imgproc等常用的库文件写入到配置文件中,万一遇到要用的函数的库文件没有包含在配置文件中只要手动添加就可以。
修改cv_bridge的配置文件结束后,我们只需要在工程的CMakeLists.txt文件中的find_package加入cv_bridge就能够使用自己安装的OpenCV版本。不需要再像(1)方法中那样手动指定路径,而且这样做的好处就是能够使用cv_bridge。因为该包在OpenCV图像与ROS图像之间的转换中会经常用到。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/b7f92ea1e82ac49f8649fe78b13940f6)
这时候再编译工程就可以通过了,但奇怪的是我们发现编译输出OpenCV的版本还是3.3.1并且配置文件还是默认的OpenCV3,如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/81725e9eae4ec24216aebfdd8cdc279f)
然后我在cv_bridge配置文件中输入message(STATUS "opencv version: ${OpenCV_VERSION}")来寻找哪条语句将OpenCV的版本号改回了ROS默认的版本。最终,在配置文件的最后几行的一条语句下面会出现版本号从Opencv 2.4.13变成Opencv 3.3.1。因此,该语句就是修改配置文件的路径的地方。然后,我用message找出修改OpenCV配置文件路径所在路径就知道了那个文件下面修改了OpenCV的配置文件,详细如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/2554d929ae6ae716b48b97abc9bf7557)
然后在终端下面用gedit打开cv_bridge-extras.cmake文件,就发现它修改的地方了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/676cd0f93eb9e93fa4214ebf374b3dda)
我们对该文件进行修改,把自己安装的OpenCV对应的目录输入到文件中,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/da0e52e9625d2124316cfda7da13a972)
再运行catkin_make编译工程就可以发现版本号回到了我们指定的版本号。当然,这只是对于显示设置而已,对于使用OpenCV没有太大的影响。
(3)还有一种方法就是cv_bridge与手动指定结合的方式。我们打开自己安装的OpenCV的配置文件可以发现该配置文件主要是用来设置一些OpenCV的相关信息,如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/767b83ee034fcea4d9f0229fb7ea335d)
然后我们只要在cv_bridge中导入OpenCV的配置文件,那么只要使用cv_bridge的包就可以在ROS中使用相关的OpenCV版本,如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/e22b87f939ffe37db698353508290967)
同样从配置文件中得到库函数目录的路径,如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/aec58844d241d8c41e5cef02a281bfe0)
上面要注意的是在给系统赋予OpenCV头文件和库文件目录路径时,千万不要忘记把cv_bridge的头文件和库文件目录路径忘记赋给系统。最后把cv_bridge配置文件设置OpenCV参数的选项注释掉,如下图所示。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/26/91bbf3634a5ae99a87bf5e4b854cd3b0)
以后再遇到其他OpenCV与cv_bridge之间的兼容性问题,再补充。
(1)第一种方法就是不使用cv_bridge包,在CMakeLists.txt文件中采用手动指定的方式找到自己安装的OpenCV。
首先找到OpenCV配置文件的路径,所谓的配置文件如下图:
然后在CMakeLists.txt文件下指定该文件的目录,指令如下。
set(OpenCV_DIR /usr/local/share/OpenCV) |
find_package(OpenCV REQUIRED) |
include_directories( ...... ${OpenCV_INCLUDE_DIRS} ...... ) |
target_link_libraries( ...... ${OpenCV_LIBS} ...... ) |
进入工程运行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之间的兼容性问题,再补充。
相关文章推荐
- Ubuntu16.04_ROS_kinetic下如何使用OpenCV2.4进行编译
- ROS / OpenCV Ubuntu安装“usr/include/c++/6/cstdlib:75:25: fatal error: stdlib.h: 没有那个文件或目录”解决
- 在Ubuntu16.04_ROS_kinetic上安装kinect2的驱动和bridge
- Ubuntu16.04下安装ROS Kinetic环境配置时出现没有那个文件目
- ubuntu环境下安装opencv+eclipse
- opencv安装(WinXp平台下,Qt环境)笔记之一—编译动态链接库和静态链接库文件
- VS2010环境下安装并配置OpenCV2.4
- Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试
- 【转】Ubuntu 10.4安装Bochs2.4.5笔记 (解决很多问题)
- 一步步搭建Ubuntu环境——dpkg 被中断,您必须手工运行 sudo dpkg --configure -a 解决此问题——安装Flashplayer出错
- Ubuntu英文环境下解决chrome evernote插件不能切换到中文印象笔记-剪藏以及印象笔记-悦读的问题
- 一键解决Ubuntu下安装Eclipse Android/C/C++ 开发环境
- 本地环境 Ubuntu 下安装XAMPP,phpmyadmin无法正常访问解决办法 <转>
- 本地环境 Ubuntu 下安装XAMPP,phpmyadmin无法正常访问解决办法
- OpenCV的安装与VC环境的配置(笔记)
- fedora 15 安装opencv2.2时出现undefined reference to `cvCreateCameraCapture_V4L(int)'问题及其解决方法
- Ubuntu搭建java环境时—E: 软件包 sun-java6-jre 没有可供安装的候选者 的解决办法
- [笔记]--Ubuntu安装Ruby环境用于BDD(Cucumber)测试
- 【Ubuntu+OpenCV】Ubuntu11.04下OpenCV2.1环境搭建--学习笔记【0】
- Ubuntu(Linux)环境下安装Eclipse,配置OpenCV