【ROS】将Rosbag中的Compressed类型的图像转换成raw类型

参考:https://blog.csdn.net/qq_25458977/article/details/109358577

  • 经常存在这种情况,我们需要在移动设备上录制一些包含图像信息的rosbag,但是如果录制raw格式的话,占的内存空间太大, 一般可以采用录制compressed模式。
  • 但是一般的代码中,图像从sensor_msgs转换到cv::Mat都是通过原图像,即raw类型的topic,这时可以我们自己手动添加函数,即可以订阅compressed topic的类型;或者如果改代码实在麻烦,也可以直接将录制好的comppressed包转换成raw格式。
  • 例如:如下列出的是bag包中含有comppressed类型的图像数据:
/rosout
/rosout_agg
/usb_cam150/image_raw/compressed
/usb_cam180/image_raw/compressed

需要转换为raw类型,运行如下命令即可:

rosrun image_transport republish compressed in:=/usb_cam150/image_raw raw out:=/usb_cam150/image_raw
rosrun  image_transport republish compressed in:=/usb_cam180/image_raw  raw  out:=/usb_cam180/image_raw

继续播包可看到转换之后的类型有:

/rosout
/rosout_agg
/usb_cam150/image_raw
/usb_cam150/image_raw/compressed
/usb_cam180/image_raw
/usb_cam180/image_raw/compressed
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将图像数据制集做成rosbag文件,您可以使用以下步骤: 1. 首先,您需要创建一个Ros节点,用于接收摄像头的图像数据。您可以使用ros的image_transport库来实现。 2. 将接收到的图像数据通过rosbag API写入到rosbag文件。您可以使用rosbag API提供的方法rosbag::Bag::write()来完成这个过程。 以下是一个简单的示例代码,演示了如何将摄像头的图像数据写入到rosbag文件: ```cpp #include <ros/ros.h> #include <rosbag/bag.h> #include <sensor_msgs/Image.h> #include <image_transport/image_transport.h> int main(int argc, char** argv) { ros::init(argc, argv, "image_to_rosbag"); ros::NodeHandle nh; image_transport::ImageTransport it(nh); image_transport::Subscriber sub = it.subscribe("/camera/image_raw", 1, imageCallback); rosbag::Bag bag; bag.open("my_image_data.bag", rosbag::bagmode::Write); ros::Rate loop_rate(10); while(ros::ok()) { ros::spinOnce(); loop_rate.sleep(); } bag.close(); return 0; } void imageCallback(const sensor_msgs::ImageConstPtr& msg) { bag.write("/camera/image_raw", ros::Time::now(), msg); } ``` 在上面的代码,我们首先创建了一个ros节点,并订阅了摄像头的图像话题。然后,我们创建了一个rosbag文件,并在每次接收到图像数据时,将其写入到rosbag文件。最后,我们使用ros::spinOnce()来处理ROS回调函数,并使用ros::Rate来控制循环频率。 请注意,上面的代码只是一个简单的示例,您需要根据您自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值