提取rosbag包中的图像或视频

将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 ...(连续执行命令)

posted @ 2021-12-21 09:00  帝企鹅日记  阅读(2047)  评论(0编辑  收藏  举报