orbslam2跑自己的数据集--问题解决

1. 制作自己的rgb.txt

  1. import: not authorized `os’ @ error/constitute.c/WriteImage/1028.
    解决办法:在最前面添加一行 #!/usr/bin/python
    这是防止没安装Python在默认路径,告诉Python去哪找

  2. SyntaxError: encoding problem: uft-8
    解决办法:在最前面加两行

    #!/usr/bin/python
    # encoding:utf-8
    
  3. IndexError: list assignment index out of range , 占8位自增长并填充0 ,NameError: name ‘filename_new’ is not defined
    解决办法:空数组不能直接指定位置

    filename_new = [] #这个也不能少,不然会说未定义
        for i in range(len(Filelist)):
            filename_new[i]=("%08d" % i)
    改为
    filename_new = []
        for i in range(len(Filelist)):
            filename_new.append(("%08d" % i))
    
  4. 路径拼接 IOError: [Errno 2] No such file or directory: ‘771853949233993.png’
    解决办法:这个着实是自己眼瞎,路径写错了

    有多个以”/”开头的参数,从最后”/”开头的的开始往后拼接,之前的参数全部丢弃。
    若出现”/”开头的参数,之前的参数全部丢弃
    若出现”./”开头的参数,./前的全部会保留的
    
    import os
    
    print("1:",os.path.join('aaaa','/bbbb','ccccc.txt'))
    
    print("2:",os.path.join('/aaaa','/bbbb','/ccccc.txt'))
    
    print("3:",os.path.join('aaaa','./bbb','ccccc.txt'))
    
    print("4:",os.path.join('eeee','dddd','aaaa','./bbb','ccccc.txt'))
    
    1: /bbbb\ccccc.txt
    2: /ccccc.txt
    3: aaaa\./bbb\ccccc.txt
    4: eeee/dddd/aaaa/./bbb/ccccc.txt
    
    
  5. 拷贝文件到新的路径下,并重命名

    import os
    import shutil
    #filelist是之前的文件名,path是之前的文件目录
    #output_dir是之后的输出文件目录,filename_new是之后的输出的新的文件名
    for i in range(len(Filelist)):
            print(os.path.join(output_dir, filename_new[i]))
            shutil.copy(os.path.join(path,Filelist[i]), os.path.join(output_dir, filename_new[i]))
    
  6. 字符串的分割

    str.split(s, num)[n] 
    s:表示指定的分隔符,不写的话,默认是空格(’ ‘)
    num:表示分割次数
    [n]:表示选取第n个分片,n表示返回的list中元素下标,从0开始的。
    str1 = "3w.gorly.test.com.cn"
    print str1.split('.')
    ==》['3w', 'gorly', 'test', 'com', 'cn']
    print str1.split('.')[0]
    ==》3w
    

最终的从图片制作rgb.txt,其中原始图片名字就是用时间戳命名的

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

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

#拿到所有文件名
def get_filelist(dir):
    Filelist = []
    #for home, dirs, files in os.walk(path):
    #   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(("%08d" % i)+".png")
    #生成新的文件-特定的文件名
    output_dir = os.path.join(path,"rgb")
    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(path,Filelist[i]), os.path.join(output_dir, filename_new[i]))
    #生成rgb.txt,拿到时间戳 文件路径
    #时间戳就是之前拿到的文件名 
    file_rgb = open(os.path.join(path,"rgb.txt"),'w')
    for i in range(len(Filelist)):
        strTime_Path=Filelist[i].split('.')[0]+' '+'rgb/'+filename_new[i]
        file_rgb.writelines(strTime_Path)
        file_rgb.write('\r\n')
    file_rgb.close()

2. 按照orbslam格式制作相机标定文件

/ORB_SLAM2/Examples/Monocular/
仿照TUM1.yaml,复制一份,把相机内参、畸变参数改成自己的

3. 运行程序

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/C0_train.yaml /home/mk/tools/ORB_SLAM2/data/C0_train/camera/images

但是跑出来的程序只有一帧 ,可视化窗口并没有播放那个视频序列
找了一晚上,改了改rgb.txt,使得读入里面的图片是有序的,但还是有些问题

后面去看看代码 ,明白一下这些文件具体怎么用的,看能不能解决

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值