一.ROS kinetic 中自带了opencv3 ,要使用的话,很简单,可以找到很多帖子,我这里简要说一下步骤和一些坑
,这里有几点需要注意,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
注意:这两句必须要加
总结两种不同版本的使用,
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依赖