Python : rosbag导出图像和点云

图像导出

1.首先到放置bag包的文件夹下,查看bag包中录制的topic

rosbag info xxx.bag

可以看到最后一个  topic  就是相机数据,需要注意后面的的类型,如果是 sensor 类型就可以直接用命令行进行解析,如果是  compressed ,就需要用脚本来解析出图片

  • Python : rosbag导出图像和点云_第1张图片

  • Python : rosbag导出图像和点云_第2张图片

sensor 原始数据命令直接解析:

1.  调整到你需要存储图片的文件夹中,或者新建文件夹,执行以下命令,其中<>中为你的topic信息,将<>内的内容包括<>修改为想要转换的topic名字。

rosrun image_view extract_images _sec_per_frame:=0.05 image:=

2.  新建一个终端,输入以下命令,打开ROS:

roscore

3.  在存放bag文件夹的目录下新建一个终端,并输入以下命令,就可以在2中创建的终端中看到图像的转化进度了。

rosbag play -r 0.5 

compressed 压缩数据要用脚本解析:

# 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字

你可能感兴趣的:(数据解析,计算机视觉,人工智能,python)