C++实现一个将cv::Mat转化为sensor_msgs::ImagePtr的函数
时间: 2024-01-08 07:02:30 浏览: 99
以下是一个示例代码,可以将cv::Mat转换为sensor_msgs::ImagePtr类型:
```c++
#include <opencv2/opencv.hpp>
#include <sensor_msgs/Image.h>
#include <sensor_msgs/image_encodings.h>
#include <cv_bridge/cv_bridge.h>
sensor_msgs::ImagePtr cvMatToSensorMsgsImage(const cv::Mat& image) {
sensor_msgs::ImagePtr msg = boost::make_shared<sensor_msgs::Image>();
msg->header.stamp = ros::Time::now();
msg->header.frame_id = "camera_frame";
msg->height = image.rows;
msg->width = image.cols;
msg->encoding = sensor_msgs::image_encodings::BGR8;
msg->step = image.cols * image.elemSize();
size_t size = image.rows * image.cols * image.elemSize();
msg->data.resize(size);
memcpy(&msg->data[0], image.data, size);
return msg;
}
```
其中,cv::Mat是OpenCV中的图像数据类型,sensor_msgs::Image是ROS中的消息类型,cv_bridge是ROS中用于图像数据转换的库。这个函数将cv::Mat类型的图像数据转换为sensor_msgs::ImagePtr类型,并设置了消息的一些属性,例如帧 ID、时间戳、图像大小、编码格式等。
阅读全文