本文介紹了如何將realsense-viewer錄制的rosbag格式的視頻導出成圖片序列,方便合并成mp4視頻或插入到論文中。
本文首發于?慕雪的寒舍
說明
Intel提供的realsense-viewer軟件錄制的視頻都是rosbag格式的,為了編寫論文,需要從錄制的視頻中截取一兩幀作為論文插圖,所以需要使用工具把rosbag中的視頻導出為圖片。
最簡單的方式肯定是直接rosplay播放bag里面的視頻流然后使用image_view讀取視頻流然后截圖,但是這個方式不太好,因為手動截圖非常容易出現分辨率差異(框選的區域不一樣),而且rosplay播放視頻的時候不能暫停,也不好精確的截到自己想要的那張圖片。
更好的方式是使用ros自帶的工具把rosbag里面的視頻流直接導出成圖片序列,避免自己手動截圖。在最終導出的圖片序列里面選一兩個插入到論文里面就ok了。
操作
首先,realsense-viewer錄制的視頻默認存放在用戶的~/Documents
文件夾里面,命名格式一般是今天的日期加上一串數字,比如20250331_172324.bag
。首先要做的是確定我們需要的視頻數據topic名稱,使用如下命令查看
rostopic list -b example.bag
以我使用的RealSense D435為例,圖像topic是下面這倆個,分別對應深度數據和RGB數據。我要的是RGB數據。
/device_0/sensor_1/Color_0/image/data
/device_0/sensor_0/Depth_0/image/data
先使用另外一個終端A,開啟roscore,然后在終端B里面執行如下命令,工具會在這個命令執行的目錄中輸出圖片序列。這個命令中使用了extract_images工具,并通過_sec_per_frame
指定每0.01秒截取一張圖片,通過image:=
訂閱的topic正是我需要的RGB圖像topic。
rosrun image_view extract_images \_sec_per_frame:=0.01 \image:=/device_0/sensor_1/Color_0/image/data
再開啟一個終端C,執行rosbag play命令來播放bag文件里面的視頻,其中--topics
選項用于列出我們想要廣播的topic是誰。
rosbag play exmaple.bag \--topics /device_0/sensor_1/Color_0/image/data
執行之后,extract_images工具就會自動從這個訂閱的topic中截取視頻流,輸出到執行這個命令的PWD里面了,如下所示。圖片文件的默認命名格式是frame%04.jpg
,工具會自動命名序號。
king@ubuntu:~/Documents$ ls images/
frame0000.jpg frame0164.jpg frame0328.jpg frame0492.jpg frame0656.jpg
frame0001.jpg frame0165.jpg frame0329.jpg frame0493.jpg frame0657.jpg
...
圖片輸出結果如下圖所示:
注:如果你想把這些圖片重新組成一個mp4格式的視頻,可以用ffmpeg工具實現。
The end
至此,問題解決。