Ros发布图像消息

Posted 想游泳的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ros发布图像消息相关的知识,希望对你有一定的参考价值。

ros的图像消息的格式为

sensor_msgs::ImagePtr

一般发送图像消息都是通过opencv来进行转换,ros提供了一个类cv_bridge来负责ros图像消息和opencv图像消息的转换
在OpenCV中,图像是以Mat矩阵的形式存储的,这与ROS定义的图像消息的格式有一定的区别,所以需要利用cv_bridge将这两种不相同的格式联系起来,如下图所示。

转换后的图像消息格式为

sensor_msgs::ImagePtr

opencv和cv_bridge转换的核心代码

cv::Mat img = imread("imagepath", IMREAD_COLOR);    
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", img).toImageMsg();

但在转换后的消息还不能直接用平时直接定义的node发出去,要使用image_transport进行转换,才能发出去

ros::NodeHandle nh;
 image_transport::ImageTransport it(nh);

  //topic name is /camera_front/image_color,the publish message queue size is 1.
  image_transport::Publisher pub = it.advertise("/camera_front/image_color", 1);
  pub.publish(msg);

但是image_transport同时还发布了其它的topic用来兼容image_view的功能,就是说上面的代码自动帮助发布了有压缩格式的视频流:

/camera/image
/camera/image/compressed
/camera/image/compressed/parameter_descriptions
/camera/image/compressed/parameter_updates
/camera/image/compressedDepth
/camera/image/compressedDepth/parameter_descriptions
/camera/image/compressedDepth/parameter_updates
/camera/image/theora
/camera/image/theora/parameter_descriptions
/camera/image/theora/parameter_updates

配置CmakeList.txt文件
主要是要添加opencv的支持

find_package(OpenCV  REQUIRED)
include_directories(
 
  $catkin_INCLUDE_DIRS
  $OpenCV_INCLUDE_DIRS
)
target_link_libraries(node  $catkin_LIBRARIES $OpenCV_LIBS )

以上是关于Ros发布图像消息的主要内容,如果未能解决你的问题,请参考以下文章

[实例]ROS使用OpenCV读取图像并发布图像消息在rviz中显示

为什么ROS发布者不发布第一条消息?

如何使用 ROS 2 在 python 节点中发布批量图像?

ROS2&AI电脑摄像头intel-D435,利用ros2发布订阅图像(Python)

将 Ros 消息的动态大小保存在数组中

ROS实时采集Android的图像和IMU数据