1. 制作自己的rgb.txt
-
import: not authorized `os’ @ error/constitute.c/WriteImage/1028.
解决办法:在最前面添加一行 #!/usr/bin/python
这是防止没安装Python在默认路径,告诉Python去哪找 -
SyntaxError: encoding problem: uft-8
解决办法:在最前面加两行#!/usr/bin/python # encoding:utf-8
-
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))
-
路径拼接 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
-
拷贝文件到新的路径下,并重命名
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]))
-
字符串的分割
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,使得读入里面的图片是有序的,但还是有些问题
后面去看看代码 ,明白一下这些文件具体怎么用的,看能不能解决