使用 image_transport 从 ROS 中的相机获取压缩图像
Get compressed image from camera in ROS using image_transport
我在 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
并且构建成功。谢谢。
经过一番研究,我找到了问题所在。基本上,当你想要捕获压缩图像数据时,你需要 运行:
rosmake compressed_image_transport
如上所示,使您的相机可以使用压缩图像。相机现在将发布压缩图像主题,您可以通过 运行ning
确定
rostopic list
在上面 运行ning 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[]成员;这实际上是一些增强对象,所以要获得它的大小使用 msg->data.size().
我在 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
并且构建成功。谢谢。
经过一番研究,我找到了问题所在。基本上,当你想要捕获压缩图像数据时,你需要 运行:
rosmake compressed_image_transport
如上所示,使您的相机可以使用压缩图像。相机现在将发布压缩图像主题,您可以通过 运行ning
确定rostopic list
在上面 运行ning 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[]成员;这实际上是一些增强对象,所以要获得它的大小使用 msg->data.size().