一、生成数据集
1.生成图片
搭建好ORB-SLAM后,可以跑自己的数据进行实验了。首先进行数据准备。我这里是通过摄像头采集到的视频。先要将视频处理成一帧一帧的图片,如果采集来的是图片的话就不用做这步了。为了方便并且有序,统一将图片按顺序命名为“00001.png”,“00002.png”,···,“00xxx.png”。下面附一段读视频存成指定名字的图片的python程序,程序已将生成的图片放入指定文件夹中。若你通过其他方式将名字改成上述表达的以后,将其放到’/rgb/’文件夹中:
#coding:utf-8
import os
import cv2
import numpy as np
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
videoCapture = cv2.VideoCapture('CH-B_19700101_010656.h264')
#获得码率及尺寸
fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
#读帧
if not os.path.exists('rgb/'):
os.makedirs('rgb')
success, frame = videoCapture.read()
idx = 1
while success:
cv2.imshow("显示", frame) #显示
cv2.waitKey(1000/int(fps)) #延迟
cv2.imwrite('rgb/'+getName(idx)+'.png',frame)
success, frame = videoCapture.read() #获取下一帧
idx = idx + 1
2.生成索引txt
现在要生成一个ORB-SLAM2规定的一个txt文本,用来表示图像数据集内容和关系的。参照例子,使用下面python生成txt:
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 + name + ' rgb/' + name + '.png\n'
file_object.writelines(Ostr)
file_object.close()
3.制作相机参数文件
使用opencv进行标定内参,计算出相机的内参和畸变系数,这里就不详细说了。按照例子中的参数文件(如./Examples/TUM1.yaml),制作一个新的相机参数文件。
二、运行程序进行测试
至此,就可以像使用测试用例那样,运行程序测试自己的数据集了。