rosbag info xxx.bag
可以看到最后一个 topic 就是相机数据,需要注意后面的的类型,如果是 sensor 类型就可以直接用命令行进行解析,如果是 compressed ,就需要用脚本来解析出图片
1. 调整到你需要存储图片的文件夹中,或者新建文件夹,执行以下命令,其中<>中为你的topic信息,将<>内的内容包括<>修改为想要转换的topic名字。
rosrun image_view extract_images _sec_per_frame:=0.05 image:=
2. 新建一个终端,输入以下命令,打开ROS:
roscore
3. 在存放bag文件夹的目录下新建一个终端,并输入以下命令,就可以在2中创建的终端中看到图像的转化进度了。
rosbag play -r 0.5compressed 压缩数据要用脚本解析:
# coding:utf-8import binascii
import rosbag
import roslib; # roslib.load_manifest(PKG)import rospy
import cv2
from cv_bridge import CvBridge
from sensor_msgs.msg import Image
path = '/home/dell/data3/labelme_data/dataset/image/data/104_lidar/out_pcd2/'
bag_file = '/home/dell/data3/labelme_data/dataset/image/data/104_lidar/20220711111816-2577455936-rosslave-104-HQHYD6M010.bag'
bag = rosbag.Bag(bag_file, "r")
bridge = CvBridge()
#此处的节点一次只可以是一个
bag_data = bag.read_messages('/sensor/lidar/middle/point_cloud')
for topic, msg, t in bag_data:
cv_image = bridge.compressed_imgmsg_to_cv2(msg, "bgr8")
cv2.imshow("Image window", cv_image)
# imshow可有可无只是为了检验是否在提取图像,并展示
timestr = "%.6f" % msg.header.stamp.to_sec()
# %.6f表示小数点后带有6位,可根据精确度需要修改;
image_name = timestr + ".jpg" # 图像命名:时间戳.jpg
cv2.imwrite(path+image_name, cv_image) # 保存;
cv2.waitKey(3)
点云导出
在bag包的路径下,输入命令
rosrun pcl_ros bag_to_pcd <*.bag>后面三个<>括号中对应的分别是 bag包名,提取点云话题,输出文件夹
例如:rosrun pcl_ros bag_to_pcd water3.bag /velodyne_points /home/zbr/bagfile/pcd
参考:
(17条消息) 运用ROS工具从bag文件中导出图像_学习记录llll的博客-CSDN博客
当前文档32条主题 共436字



