ORB—SLAM2学习记录2-ORB_SLAM2运行自己的数据集

本文介绍如何为 ORB-SLAM2 准备自定义数据集,包括从视频中提取图片、生成索引文件和相机参数文件等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORB-SLAM2运行自己的数据集

本人邮箱:sylvester0510@163.com,欢迎交流讨论, 
欢迎转载,转载请注明网址http://blog.youkuaiyun.com/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
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

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()
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3.制作相机参数文件

  使用OpenCV进行标定内参,计算出相机的内参和畸变系数,这里就不详细说了。按照例子中的参数文件(如./Examples/TUM1.yaml),制作一个新的相机参数文件。

二、运行程序进行测试

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值