我在turtlebot上使用ROS版本1,我想编写一个C++程序来捕获一个JPEG格式的图像,这样我就可以将图像提供给需要该格式的服务。我正在尝试使用image_transport和compressed_image_transport来实现这一点。看起来基本结构应该是:
#include <image_transport/image_transport.h>
#include <compressed_image_transport/compressed_subscriber.h>
<snip>
void imageCallback(const sensor_msgs::CompressedImage::ConstPtr & msg) { }
<snip>
image_transport::ImageTransport it(n);
compressed_image_transport::CompressedSubscriber sub = it.subscribe("/camera/image/compressed", 1000, imageCallback);
然而,上面的内容给我带来了编译错误。如果你能推荐适当的方式来设置这一点,我们将不胜感激。我已经跑了
rosmake compressed_image_transport
它成功地建造了。谢谢。
发布于 2020-08-28 19:42:39
经过一些研究,我发现了这个问题。基本上,当您想要捕获压缩的图像数据时,您需要运行:
rosmake compressed_image_transport
如前所述,使压缩图像从您的相机可用。相机现在将发布压缩图像主题,您可以通过运行
rostopic list
在上面运行rosmake并启动您的相机之后。然后,在您的C++代码中,您需要使用:
void imageCallback(const sensor_msgs::CompressedImage::ConstPtr & msg) { }
<snip>
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("camera/rgb/image_raw/compressed", 1000, imageCallback);
// (Or whichever topic you wish to subscribe to)
正确地接收来自照相机的压缩图像消息。
注意:文档表明"CompressedImage msg“包含一个data[]成员;这实际上是一个boost对象,因此要获得它的大小,请使用msg->data.size()。
https://stackoverflow.com/questions/63637002
复制相似问题