ros代码中添加使用opencv库,cv::Mat和ros image之间的相互转换

https://blog.csdn.net/sunyoop/article/details/78630024

ros中很多时候要用到图形处理,这时就需要使用opencv库,本篇主要将怎么在ros现成node上使用opencv的库函数

1.修改编译脚本

第一步:在node所在的CMakefile文件中opencv库查找,例如:

  1. find_package( OpenCV REQUIRED COMPONENTS

  2. core

  3. highgui

  4. imgproc

  5. )

或者直接

find_package( OpenCV REQUIRED )


为的是在编译前到环境变量配置的路径中找到opencv package,如果找不到,那需要查看下LD_LIBRARY_PATH环境变量,或者有没有安装opencv

第二步:在target_link_libraries中增加以来库,例如:

target_link_libraries(xxxxxx ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})


增加目标链接时的依赖库

第三步:在所需使用的cpp文件中增加头文件,例如:

  1. #include <opencv2/core/core.hpp>

  2. #include <opencv2/imgproc/imgproc.hpp>

  3. #include <opencv2/highgui/highgui.hpp>

2.cvMat和ros image data之间的转换

ros中已提供现成的组建cv_bridge,方便大家来使用

第一步:需要在CMakefile中,增加如下:

find_package(catkin REQUIRED nodelet roscpp sensor_msgs cv_bridge)


如果cakin_package里面有内容,例如

[html] view plain copy

  1. <code class="language-html">catkin_package(  
  2.   INCLUDE_DIRS include  
  3.   LIBRARIES xxxxx  xxxx   xxxxx  
  4.   CATKIN_DEPENDS dynamic_reconfigure image_geometry image_transport nodelet roscpp sensor_msgs  
  5. )</code>  

也需要在最后CATKIN_DEPENDS中添加cv_bridge,改成如下

  1. catkin_package(

  2. INCLUDE_DIRS include

  3. LIBRARIES xxxxx xxxx xxxxx

  4. CATKIN_DEPENDS dynamic_reconfigure image_geometry image_transport nodelet roscpp sensor_msgs cv_bridge

  5. )

第二步:需要在package.xml中添加如下

  1. <build_depend>cv_bridge</build_depend>

  2. <run_depend>cv_bridge</run_depend>

第三步:需要在cpp文件中增加头文件,如下

#include <cv_bridge/cv_bridge.h>


就可以使用cv_bridge,使用方法可见链接http://wiki.ros.org/cv_bridge/Tutorials。

http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages

猜你喜欢

转载自blog.csdn.net/chengde6896383/article/details/82428699