需要用到ros下的cv_bridge作为桥梁
cv::Mat转sensor_msgs::Image
将cv::Mat image 转为 sensor_msgs::ImagePtr msg
#include "ros/ros.h"
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include "opencv2/opencv.hpp"
中间代码省略
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
// 发布图像
image_pub.publish(*msg);
cv_bridge::CvImage返回一个sensor_msgs::ImagePtr类型,因此发布的时候需要*msg
sensor_msgs::Image转cv::Mat
将sensor_msgs::Image msg转为cv::Mat img__
#include "ros/ros.h"
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include "opencv2/opencv.hpp"
中间代码略
cv_bridge::CvImagePtr cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::TYPE_8UC3);
cv::Mat img__ = cv_ptr->image;
cv_bridge::toCvCopy返回cv_bridge::CvImagePtr,需要使用->image获取cv::Mat