-
先说原因,TUM数据集中的rgb.txt和depth.txt存储了所有图像的采集时间和文件名称,而自己录制的数据集的rgb.txt 和 depth.txt时间戳文件需要自己生成,可视化窗口只显示一帧,并没有连续播放的原因就是自己生成的时间戳文件的格式不对。
之前参考过一个博客说的是用
系统时间戳.帧序列号 rgb/系统时间戳.帧序列号.png
结果就遇到了这种问题。 -
我能运行的时间戳格式
rgb.txt
1711458.353663 rgb/1711458.353663.png
1711458.353723 rgb/1711458.353723.png
1711458.353783 rgb/1711458.353783.png
1711458.353843 rgb/1711458.353843.png
1711458.353903 rgb/1711458.353903.png
1711458.353963 rgb/1711458.353963.png
1711458.354023 rgb/1711458.354023.png
depth.txt
1711458.353613 depth/1711458.353613.png
1711458.353646 depth/1711458.353646.png
1711458.353680 depth/1711458.353680.png
1711458.353713 depth/1711458.353713.png
1711458.353746 depth/1711458.353746.png
1711458.353780 depth/1711458.353780.png
1711458.353813 depth/1711458.353813.png
associations.txt
1711458.353663 rgb/1711458.353663.png 1711458.353613 depth/1711458.353613.png
1711458.353723 rgb/1711458.353723.png 1711458.353646 depth/1711458.353646.png
1711458.353783 rgb/1711458.353783.png 1711458.353680 depth/1711458.353680.png
1711458.353843 rgb/1711458.353843.png 1711458.353713 depth/1711458.353713.png
1711458.353903 rgb/1711458.353903.png 1711458.353746 depth/1711458.353746.png
1711458.353963 rgb/1711458.353963.png 1711458.353780 depth/1711458.353780.png
1711458.354023 rgb/1711458.354023.png 1711458.353813 depth/1711458.353813.png
1711458.354083 rgb/1711458.354083.png 1711458.353846 depth/1711458.353846.png
供大家参考,希望给到大家帮助。
- 细节:
使用深度相机录制的是TUM类型的数据集
录制出的文件格式是
文件夹内部文件是自动命名的,命名为
自己写了几个脚本来生成时间戳文件和时间戳关联文件
rename_Depth_better.py
使用方法:把脚本放在和Color 一个目录下
运行:控制台运行 python3 rename_Color_better.py Color/
#! /usr/bin/env python
import os
import sys
def rename_png_files(folder_path):
# 创建一个文本文件用于保存重命名后的文件名
output_file = open("depth.txt", "w")
# 用于存储重命名后的文件名及其对应的原始文件名
renamed_files = []
# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
if filename.endswith(".png"): # 只处理png格式的文件
# 解析文件名
parts = filename.split("_")
if len(parts) < 4:
print(f"文件名格式错误:{filename}")
continue
timestamp = parts[3] # 时间戳部分
# 提取时间戳中的秒和微秒部分
seconds = timestamp[:-6] # 前面的部分(秒)
microseconds = timestamp[-6:] # 后面的部分(微秒)
# 构造新的文件名(时间戳格式:秒.微秒)
new_filename = f"{seconds}.{microseconds}"
new_filename_with_path = os.path.join(folder_path, new_filename + ".png")
# 重命名文件
os.rename(os.path.join(folder_path, filename), new_filename_with_path)
# 添加重命名后的文件名及其对应的原始文件名到列表中
renamed_files.append((seconds + "." + microseconds, new_filename))
# 对重命名后的文件名按时间戳从小到大排序
renamed_files.sort(key=lambda x: float(x[0]))
# 将重命名后的文件名及其对应的原始文件名写入文本文件,并按时间戳从小到大排列
for timestamp, new_filename in renamed_files:
output_file.write(f"{new_filename} depth/{new_filename}.png\n") #要注意!!!这里只有一个空格隔开 ORB-SLAM2规定的索引txt文本
# 关闭文本文件
output_file.close()
# 将文件夹重命名为 'depth'
os.rename(folder_path, os.path.join(os.path.dirname(folder_path), 'depth'))
if __name__ == "__main__":
# 检查输入参数是否足够
if len(sys.argv) != 2:
print("Usage: python3 script_name.py folder_path")
sys.exit(1)
# 获取文件夹路径参数
folder_path = os.path.abspath(sys.argv[1])
# 调用函数进行重命名操作
rename_png_files(folder_path)
rename_Color_better.py
使用方法:把脚本放在和Depth 一个目录下
运行:python3 rename_Depth_better.py Depth/
#! /usr/bin/env python
import os
import sys
def rename_png_files(folder_path):
# 创建一个文本文件用于保存重命名后的文件名
output_file = open("rgb.txt", "w")
# 用于存储重命名后的文件名及其对应的原始文件名
renamed_files = []
# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
if filename.endswith(".png"): # 只处理png格式的文件
# 解析文件名
parts = filename.split("_")
if len(parts) < 4:
print(f"文件名格式错误:{filename}")
continue
timestamp = parts[3] # 时间戳部分
# 提取时间戳中的秒和微秒部分
seconds = timestamp[:-6] # 前面的部分(秒)
microseconds = timestamp[-6:] # 后面的部分(微秒)
# 构造新的文件名(时间戳格式:秒.微秒)
new_filename = f"{seconds}.{microseconds}"
new_filename_with_path = os.path.join(folder_path, new_filename + ".png")
# 重命名文件
os.rename(os.path.join(folder_path, filename), new_filename_with_path)
# 添加重命名后的文件名及其对应的原始文件名到列表中
renamed_files.append((seconds + "." + microseconds, new_filename))
# 对重命名后的文件名按时间戳从小到大排序
renamed_files.sort(key=lambda x: float(x[0]))
# 将重命名后的文件名及其对应的原始文件名写入文本文件,并按时间戳从小到大排列
for timestamp, new_filename in renamed_files:
output_file.write(f"{new_filename} rgb/{new_filename}.png\n") #要注意!!!这里只有一个空格隔开 ORB-SLAM2规定的索引txt文本
# 关闭文本文件
output_file.close()
# 将文件夹重命名为 'rgb'
os.rename(folder_path, os.path.join(os.path.dirname(folder_path), 'rgb'))
if __name__ == "__main__":
# 检查输入参数是否足够
if len(sys.argv) != 2:
print("Usage: python3 script_name.py folder_path")
sys.exit(1)
# 获取文件夹路径参数
folder_path = os.path.abspath(sys.argv[1])
# 调用函数进行重命名操作
rename_png_files(folder_path)
mergy.py 由于相机录制出的彩色图和深度图本来就是关联的,所以这只是一个简单的拼接操作
使用方法:放在同一个目录下
运行: python3 merge.py
def merge_files(rgb_file, depth_file, output_file):
with open(rgb_file, 'r') as rgb_f, open(depth_file, 'r') as depth_f, open(output_file, 'w') as out_f:
for line in rgb_f:
out_f.write(line.strip() + ' ')
depth_line = depth_f.readline().strip()
out_f.write(depth_line + '\n')
if __name__ == "__main__":
rgb_file = 'rgb.txt'
depth_file = 'depth.txt'
output_file = 'associations.txt'
merge_files(rgb_file, depth_file, output_file)