ORB-SLAM2运行自己的数据集

ORB-SLAM2运行自己的数据集

本人邮箱:[email protected],欢迎交流讨论,
欢迎转载,转载请注明网址http://blog.csdn.net/u010128736/


一、生成数据集

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),制作一个新的相机参数文件。

二、运行程序进行测试

  至此,就可以像使用测试用例那样,运行程序测试自己的数据集了。

你可能感兴趣的:(Linux,SLAM)