ROS 与opencv2和opencv3的各种坑

一.ROS kinetic 中自带了opencv3 ,要使用的话,很简单,可以找到很多帖子,我这里简要说一下步骤和一些坑

步骤: 1 在cmakelist文件中添加find_package(OpenCV REQUIRED)

,这里有几点需要注意,ros wiki的教程上说不需要加 数字 "3" 即find_package(OpenCV 3 REQUIRED),大多数时候确实可以不用加,但是我今天试了一下,如果你之前使用了find_package(OpenCV 2) ,也就是用opencv2,然后,你在改回默认的不加"2"的,然后我发现,变量${OpenCV_Include_dirs}依然还是opencv2的路径而不是/opt/ros/kinetic/include/opencv-3.3.1-dev 

小提示:

若够想看cmakelist.txt文件中各种变量的值 可以在文件的最后加一句:

message(STATUS "what' is that ?" : ${OpenCV_INCLUDE_DIRS})类似的语句就可以看到变量的值了,方便你检查自己错误出在什么地方

关于cv_bridge的一些坑:

1.官方教程(wiki.ros.org/opencv3) 4.4 所说的package.xml中的depend 不是depend opencv3 而是 cv_bridge ,也就是说如果你要用opencv3的话,package.xml中不再有opencv这个depend了,而如果你用了opencv2,你就不能把cv_bridge作为依赖而是添加opencv依赖,因为cv_bridge的配置文件中关联的是opencv3, 所以opencv2的项目中不能有cv_bridge,除非你参考网上的教程修改 /opt/ros/kinetic/share/cv_bridge/cmake中的配置文件 cv_bridgeConfig.cmake文件,这样你才能在opencv2的项目中使用cv_bridge

步骤: 2 在include 和 terget_linke_library中添加对应的库

注意:这两句必须要加

总结两种不同版本的使用, 

1.opencv3

cmakelist: find_package(OpenCV ) 可选其他形式:( find_package(OpenCV  3) , find_package(OpenCV  3.几.几 EXACT )特定版本号 ...) + find_package(cv_bridge)

inlcude +terget_linke_library 

只需添加 cv_bridge依赖

2.opencv2

cmakelist: find_package(OpenCV 2 )  注意:由于knetic 及以上版本都使用opencv3作为默认,所以要使用opencv2的话要自己安装opencv2,为了能找到路径,可以在cmakelist文件中 使用 set(OpenCV_DIRS  "你自己的opencv安装路径") ,如果你不知到该路径填写什么,可以百度 如何查找opencv路径 ,或者尝试查找含有opecvconfig.cake文件的文件夹

inlcude +terget_linke_library 

注意 :可以 使用cv_bridge 只要你已经修改过cv_bridge的配置文件

package.xml: 添加opencv依赖 

猜你喜欢

转载自blog.csdn.net/explorer9607/article/details/102638819