orbslam2跑自己代码--可视化窗口只显示一帧,并没有连续播放

1. 之前虽然把rgb.txt生成了,但是程序跑出来可视化窗口并没有播放连续的图片序列,一直只有一帧

  1. 试了下网上下载的tum的数据,是没问题的,所以只能是rgb.txt的问题
  2. 网上查了一下,看到说mono_tum.cc是默认不看rgb.txt前三行的(因为前三行只是说明一下这个rgb.txt来源,以及表示的内容含义)
  3. 然后就跟着在我的rgb.txt前面加了三行,这样终端运行程序,输出时加载的图片数量就从1739变成了1742,这样图片是完全加载出来了

但是可视化窗口,仍然只有那一帧

  1. 然后也看到有人说,可视化窗口播放的图片序列,一卡一卡的,是因为休眠时间太长了
  2. 突然想到,我也可能这样(那我的休眠时间也太长了吧/(ㄒoㄒ)/~~)
  3. 看代码发现它是(加载下一帧的时间戳差-处理当前这种图片的时间)*1e6,所以这个和时间戳怎么写(因为时间戳没直接给)是很有关系的
  4. 最后,第一列小数后面要有6位
# color images
# file: 'C0_train'
# timestamp filename
0.000001 rgb/00001.png
0.000002 rgb/00002.png
0.000003 rgb/00003.png
0.000004 rgb/00004.png
0.000005 rgb/00005.png
0.000006 rgb/00006.png
0.000007 rgb/00007.png
0.000008 rgb/00008.png
0.000009 rgb/00009.png
0.000010 rgb/00010.png
0.000011 rgb/00011.png
0.000012 rgb/00012.png
0.000013 rgb/00013.png
0.000014 rgb/00014.png
0.000015 rgb/00015.png
0.000016 rgb/00016.png
0.000017 rgb/00017.png
0.000018 rgb/00018.png
0.000019 rgb/00019.png
0.000020 rgb/00020.png
0.000021 rgb/00021.png
0.000022 rgb/00022.png
0.000023 rgb/00023.png
0.000024 rgb/00024.png
0.000025 rgb/00025.png
0.000026 rgb/00026.png
0.000027 rgb/00027.png
0.000028 rgb/00028.png
0.000029 rgb/00029.png

2. 生成rgb.txt

这个是修改那个rgb.txt的,网上的代码,稍微改了一点

#!/usr/bin/python
# encoding:utf-8
import os

def getName(num):
    strTmp = []
    strRes = ''

    while(num / 10):
        strTmp.append(num % 10)
        num = num / 10
    strTmp.append(num)
    n = len(strTmp)
    for i in range(0,5-n):
        strRes = strRes + '0'
    for i in range(n-1,-1,-1):
        strRes = strRes + str(strTmp[i])
    return strRes

file_object = open('rgb.txt','w')
Ostr = ''
num = len(os.listdir('rgb'))
for i in range(1,num+1):
    name = getName(i)
    Ostr = Ostr + '0.0'+name + ' rgb/' + name + '.png\n'
file_object.writelines(Ostr)
file_object.close()

3. 图片重命名

这个是图片重命名的,原始图片放在rgb下面,改名后,放在rg下面,最后删掉之前的rgb文件夹,并将rg改名为rgb
orbslam2跑自己代码--可视化窗口只显示一帧,并没有连续播放_第1张图片

#!/usr/bin/python
# encoding:utf-8
import os
import shutil

path ='/home/mk/tools/ORB_SLAM2/data/C0_train/camera/test1'


#拿到所有文件名
def get_filelist(dir):
    Filelist = []
    #for home, dirs, files in os.walk(dir):
    #    for filename in files:
            # 文件名列表,包含完整路径
            #Filelist.append(os.path.join(home, filename))
            # # 文件名列表,只包含文件名
    #        Filelist.append( filename)
    for data_file in sorted(os.listdir(dir)):#(按照一定顺序读取文件)
        Filelist.append( data_file) 
    return Filelist


if __name__ =="__main__":
    #拿到所有文件名
    Filelist = get_filelist(os.path.join(path,"rgb"))
    #生成新的文件名
    filename_new = []
    for i in range(len(Filelist)):
        filename_new.append(("%05d" % (i+1))+".png")
    #生成新的文件-特定的文件名
    output_dir = os.path.join(path,"rg")
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    for i in range(len(Filelist)):
        print(os.path.join(output_dir, filename_new[i]))
        shutil.copy(os.path.join(os.path.join(path,"rgb"),Filelist[i]), os.path.join(output_dir, filename_new[i]))

你可能感兴趣的:(orbslam2)