解析.bag文件获得图片,pcd点云,并将图片编成符合slam的数据集形式

一、解析.bag文件获得图片,pcd点云

1. 查看某个.bag的数据信息(其中*为.bag文件名)

rosbag info *.bag

结果如下:

查看.bag文件信息

 2. 解析该.bag文件到.jpg格式图片

安装如下依赖项

sudo apt-get install mjepgtools
sudo apt-get install ffmpeg

新建终端,执行

roscore

调整到你需要存储图片的文件夹中,或者新建文件夹,新建终端执行以下命令,其中<>中为你的topic信息

rosrun image_view extract_images _sec_per_frame:=0.05 image:=<IMAGE TOPIC IN BAGFILE>

新建终端。调整到待解析的rosbag文件目录下,回放rosbag包,执行以下命令

rosbag play -r 0.5  <BAG FILE>

3. 解析.bag文件到.pcd点云数据文件

以下两种方法:

1.rosrun pcl_ros bag_to_pcd <*.bag> <topic> <output_directory>
2.rosrun pcl_ros pointcloud_to_pcd input:=<topic>

4.附上常用的.bag文件使用方法

检查并播放bag文件

rosbag info *.bag

在这里插入图片描述

可以看出topic类型以及数量

 运行bag数据

rosbag play *.bag

二、将图片编成符合slam的数据集形式

1.若数据集是用.bag文件进行提取的则采用如下代码进行编译

会生成一个rgb.txt文件,并且会将图片重新命名,

import numpy as np
import os
# 图片文件夹,后面的/不能省
from PIL import Image


img_path = 'D:/VS_project/yolov5-v5.0/ssd.pytorch-master/ssd.pytorch-master/aerial1'
for root, dirs, files in os.walk(img_path, topdown=False):
    print(root)     # 当前目录路径
    print(dirs)     # 当前目录下所有子目录
print(files)        # 当前路径下所有非目录子文件
# with open(img_path+"\opt_poses.txt") as f:
#     read_data = f.readlines()
# print(read_data)
count = 0
write_date = [0 for _ in range(4801)]
time_list = [0 for _ in range(4801)]
# print(len(read_data))
for j in range(0,len(files)):
    time_list[j] = "1." + files[j][5:9]
    # print(j)
print(time_list)
# for wai in range(len(read_data)):
#     for nei in range(len(read_data)-wai):
#         if (time_list[wai]>time_list[wai+nei]):
#             exchange = time_list[wai]
#             time_list[wai] = time_list[wai+nei]
#             time_list[wai+nei] = exchange
# #print(time_list)
with open("D:/VS_project/yolov5-v5.0/ssd.pytorch-master/ssd.pytorch-master/aerial1/rgb.txt", 'w') as g:
    flag = 0
    for i in range(4801):
        print(flag)
        if(files[i][-3:-1]+files[i][-1] == "jpg"):
            I = Image.open('./aerial1/'+files[i])
            write_date[i] = time_list[i] + ' ' + time_list[i] + '.jpg' + "\n"
            #print(write_date[i])
            I.save('./picture/aerial1/'+time_list[i]+'.jpg')
            flag = flag +1
    count = 0
    for i in range(4801):
        print(write_date[i])
        g.writelines(write_date[i])
        count=count+1
    print(count)

2.若原有的数据集不符合slam的运行时序,采用如下代码进行修正

import numpy as np
import os
# 图片文件夹,后面的/不能省
from PIL import Image


img_path = 'D:/VS_project/yolov5-v5.0/ssd.pytorch-master/ssd.pytorch-master/rafz_gray'
for root, dirs, files in os.walk(img_path, topdown=False):
    print(root)     # 当前目录路径
    print(dirs)     # 当前目录下所有子目录
# print(files)        # 当前路径下所有非目录子文件
with open(img_path+"\opt_poses.txt") as f:
    read_data = f.readlines()
# print(read_data)
count = 0
write_date = [0 for _ in range(249)]
time_list = [0 for _ in range(249)]
print(len(read_data))
for j in range(len(read_data)):
    # print(read_data[j][0:8])
    time_list[j] = read_data[j][0:8]
    # if(read_data[j][16] == ' ' ):
    #     time_list[j] = read_data[j][0:16]+"0"+str(j)
    # else:
    #     time_list[j] = read_data[j][0:17] +str(j)
    #print(time_list[j])
for wai in range(len(read_data)):
    for nei in range(len(read_data)-wai):
        if (time_list[wai]>time_list[wai+nei]):
            exchange = time_list[wai]
            time_list[wai] = time_list[wai+nei]
            time_list[wai+nei] = exchange
#print(time_list)
with open(img_path+"\\rgb.txt", 'w') as g:

    for i in range(249):
        # print(i[-3:-1]+i[-1])
        # if(i[-3:-1]+i[-1] == "jpg"):
        #     #print(count)
        #     #I = Image.open('./cadastre_gray/'+i)
        #     count = int(i[6:-1].split('.')[0])
        #     print(count)
        #     # print(read_data[count][0:7] +' '+ i)
        #     write_date[count] = time_list[count] +' '+ time_list[count]+'.jpg' +"\n"
        #     print(write_date[count])
        #     # print(read_data[count][0:7])
        #     #I.save('./picture/'+time_list[count]+'.jpg')

        # print(count)
        I = Image.open('./rafz_gray/opt_image_'+str(i)+'.jpg')
        write_date[i] = time_list[i] + ' ' + time_list[i] + '.jpg' + "\n"
        #print(write_date[i])
        I.save('./picture/rafz/'+time_list[i]+'.jpg')
    count = 0
    for i in range(249):
        print(write_date[i])
        g.writelines(write_date[i])
        count=count+1
    print(count)
# I = Image.open('./image.png')
# print(type(I))       #---><class 'PIL.JpegImagePlugin.JpegImageFile'>
# print(I.size)        #--->(1280, 720)
# I.show()
# I.save('./save.png')

参考链接:(66条消息) 解析rosbag中的.bag文件,得到.jpg图片数据和.pcd点云数据_NJIER的博客-优快云博客icon-default.png?t=N4P3https://blog.youkuaiyun.com/weixin_40000540/article/details/83859694

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值