如果用ros的 image_transport::Publisher
发布图片的话则,ros会自动添加一个 image/compressed
的topic,将原始图像编码,编码方式可以设置为png\jpeg
.
有时候我们获取到的图片就是编码之后的数据,这个时候如果将解码转成 cv::Mat
再pub的话 性能开销比较大,并且数据损失更大. 所以我们可以直接pub compressed
.
注意 我们使用的并不是 compressed_publisher
#include <>
ros::init(argc, argv, "nodename");
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<sensor_msgs::CompressedImage>("node/image/compressed", 100);
sensor_msgs::CompressedImage jpeg_img;
jpeg_img.format = "jpeg";
jpeg_img.header.stamp.sec = times;
jpeg_img.header.stamp.nsec = timeu*1000;
jpeg_img.header.seq = kSeq++;
// pimage :pointer to jpeg image buffer
// image_pos : buffer size
std::vector<unsigned char> jpeg_buffer(pimage, pimage+image_pos);
jpeg_img.data.swap(jpeg_buffer);
pub.publish(jpeg_img);