將rosbag包中的視頻數據提取成圖片和視頻
注意:rosbag包中的圖像話題發布名稱為/cv_camera/image_raw/compressed消息格式為sensor_msgs/CompressedImage,但是生成圖片斷接受的消息格式為sensor_msgs/Image,
接收與發布的消息類型不一致,無法轉換
注意:使用前需安裝依賴
sudo apt-get install ros-melodic-image-view
sudo apt-get install mjepgtools
sudo apt-get install ffmpeg//轉視頻的依賴
1、寫launch文件
<launch>
<!-- rosbag play 播放bag包>
<node pkg="rosbag" type="play" name="rosbag" args="-d 2 /home/hx/catkin_test/src/2021-10-09-10-00-27.bag"/>
<node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
<remap from="image" to="/camera_out/image"/>
<!-- 將"/camera_out/image"/轉換成image,並且存儲在~/.ros文件夾中>
</node>
</launch>
2、在運行roslaunch文件前,需要在命令行輸入
rosrun image_transport republish compressed in:=/cv_camera/image_raw/ raw out:=camera_out/image
將compressed轉換成image,然后打開另外一個終端運行launch文件即可
3、運行完后即可在~/.ros文件夾中找到生成的jpg格式的圖片
4、mv ~/.ros/frame*.jpg source,將圖片文件移動到你想要的文件夾中
5、ffmpeg -r 15 -s 1920*1080 -i frame%04d.jpg test.mp4 ,將圖片生成幀率15,分辨率1920*1080,名字為test的mp4視頻文件
rm -f frame*.jpg //刪除文件夾中所有以frame開頭的jpg文件
批量將bag包轉為圖片時,可以
修改launch為
<launch>
<!-- 將復位改為respawn="true",對於每個節點,設置復位屬性為真 respawn=”true”,這樣當節點停止的時候,roslaunch會重新啟動該節點>
<node name="extract" pkg="image_view" type="extract_images" respawn="true" output="screen" cwd="ROS_HOME">
<remap from="image" to="/camera_out/image"/>
<!-- 將"/camera_out/image"/轉換成image,並且存儲在~/.ros文件夾中>
</node>
</launch>
然后在命令行輸入rosbag play 1.bag 2.bag 3.bag ...(不知道為什么不可行)
只能rosbag play 1.bag;rosbag play 2.bag; rosbag play3.bag ...(連續執行命令)