【SLAM】将 realsense-viewer 录制的 rosbag 视频导出成图片序列(Realsense D435)
本文介绍了如何将 realsense-viewer 录制的 rosbag 格式的视频导出成图片序列,方便合并成 mp4 视频或插入到论文中。
说明
Intel 提供的 realsense-viewer 软件录制的视频都是 rosbag 格式的,为了编写论文,需要从录制的视频中截取一两帧作为论文插图,所以需要使用工具把 rosbag 中的视频导出为图片。
最简单的方式肯定是直接 rosplay 播放 bag 里面的视频流然后使用 image_view 读取视频流然后截图,但是这个方式不太好,因为手动截图非常容易出现分辨率差异(框选的区域不一样),而且 rosplay 播放视频的时候不能暂停,也不好精确的截到自己想要的那张图片。
更好的方式是使用 ros 自带的工具把 rosbag 里面的视频流直接导出成图片序列,避免自己手动截图。在最终导出的图片序列里面选一两个插入到论文里面就 ok 了。
操作
首先,realsense-viewer 录制的视频默认存放在用户的 ~/Documents
文件夹里面,命名格式一般是今天的日期加上一串数字,比如 20250331_172324.bag
。首先要做的是确定我们需要的视频数据 topic 名称,使用如下命令查看
1 | rostopic list -b example.bag |
以我使用的 RealSense D435 为例,图像 topic 是下面这俩个,分别对应深度数据和 RGB 数据。我要的是 RGB 数据。
1 | /device_0/sensor_1/Color_0/image/data |
先使用另外一个终端 A,开启 roscore,然后在终端 B 里面执行如下命令,工具会在这个命令执行的目录中输出图片序列。这个命令中使用了 extract_images 工具,并通过_sec_per_frame
指定每 0.01 秒截取一张图片,通过 image:=
订阅的 topic 正是我需要的 RGB 图像 topic。
1 | rosrun image_view extract_images \ |
再开启一个终端 C,执行 rosbag play 命令来播放 bag 文件里面的视频,其中 --topics
选项用于列出我们想要广播的 topic 是谁。
1 | rosbag play exmaple.bag \ |
执行之后,extract_images 工具就会自动从这个订阅的 topic 中截取视频流,输出到执行这个命令的 PWD 里面了,如下所示。图片文件的默认命名格式是 frame%04.jpg
,工具会自动命名序号。
1 | king@ubuntu:~/Documents$ ls images/ |
图片输出结果如下图所示:
注:如果你想把这些图片重新组成一个 mp4 格式的视频,可以用 ffmpeg 工具实现。
The end
至此,问题解决。