C++实现一个sensor_msgs::ImagePtr转cv::Mat的函数
时间: 2024-01-07 08:02:44 浏览: 178
可以使用以下代码实现将ROS中的sensor_msgs::Image转为OpenCV中的cv::Mat:
```c++
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
cv::Mat imageMsgToMat(const sensor_msgs::ImageConstPtr& imageMsg)
{
// 将ROS中的sensor_msgs::Image转为OpenCV中的cv::Mat
cv_bridge::CvImagePtr cvPtr;
try
{
cvPtr = cv_bridge::toCvCopy(imageMsg, sensor_msgs::image_encodings::BGR8);
}
catch (cv_bridge::Exception& e)
{
ROS_ERROR("cv_bridge exception: %s", e.what());
return cv::Mat();
}
return cvPtr->image;
}
```
其中,cv_bridge库用于将ROS中的图像消息转换为OpenCV中的图像格式。需要注意的是,这里假设图像的编码格式为BGR8。如果图像编码格式不同,则需要相应地修改代码。
阅读全文