ORB_SLAM2运行自己的数据集(使用视频或图片序列)、运行KITTI数据集
本项目的运行环境为Ubuntu18.04。本项目的运行前提是安装并配置好了ORB_SLAM2。如果还没安装好的,可以参照此教程:Ubuntu18.04 ORB_SLAM2的安装、配置、运行SLAM单目实例1、视频转为图片序列。可以使用FFmpeg把视频转换为图像序列,也可以使用下列代码实现。新建一个.py文件,我这命名为change.py。#coding:utf-8import os...
本项目的运行环境为Ubuntu18.04。
本项目的运行前提是安装并配置好了ORB_SLAM2。如果还没安装好的,可以参照此教程:Ubuntu18.04 ORB_SLAM2的安装、配置、运行SLAM单目实例
1、视频转为图片序列。
可以使用FFmpeg把视频转换为图像序列,也可以使用下列代码实现。
新建一个.py文件,我这命名为change.py。
#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('xxx.mp4')
#获得码率及尺寸
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(videoCapture.get(cv2.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)+'.jpg',frame)
success, frame = videoCapture.read() #获取下一帧
idx = idx + 1
使用下列命令给.py文件加权限。
chmod 775 change.py
运行.py文件。
python changetxt.py
2、生成图像集的.txt文件
将rgb文件夹中的图片序列转成为rgb.txt文件。文件中是图片的时间戳和图片名字。
新建一个.py文件,我这命名为test.py。
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 + '.jpg\n'
file_object.writelines(Ostr)
file_object.close()
使用下列命令给.py文件加权限。
chmod 775 test.py
运行.py文件。运行成功后,文件中会生成一个rgb.txt文件。
python test.py
下图为rgb.txt中的内容。前面是时间戳,后面是文件图片信息。
3、配置.yaml文件
可以从目录home/catkin_ws/src/ORB_SLAM2/Examples/Monocular/ 下把TUM1.yaml文件复制过来。修改为自己相机对应的相机内参和畸变参数。
4、运行momo_tum数据集
进入自己的ORB_SLAM2目录。
cd ~/catkin_ws/src/ORB_SLAM2
使用下列命令来执行程序。要注意修改为自己的.yaml文件和刚刚存放数据集的路径。
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/hadoop/test
运行结果如下图所示:
绿色记号为每一帧图像中识别出来的特征关键点。
5、运行momo_kitti数据集
可以从目录home/catkin_ws/src/ORB_SLAM2/Examples/Monocular/ 下把KITTI00-02.yaml文件复制过来。修改为自己相机对应的相机内参和畸变参数。
或者把数据集中calib.txt放到与图片序列同一文件夹中,其实这里面也就是畸变参数。
Camera.P0: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 0.000000000000e+00 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
Camera.P1: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 -3.861448000000e+02 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
Camera.P2: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 4.538225000000e+01 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 -1.130887000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 3.779761000000e-03
Camera.P3: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 -3.372877000000e+02 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 2.369057000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 4.915215000000e-03
图像集times.txt文件:
一共是需要用到是下面这几个文件:
image_0是图片序列文件夹;
calib.txt是畸变参数,如果直接在.yaml文件中修改了则不需要该文件了;
KITTI00-02.yaml是ORB-SLAM2编译生成的针对MONO_KITTI数据集的可执行文件;
times.txt是图像集文件。
运行:
进入自己的ORB_SLAM2目录。
cd ~/catkin_ws/src/ORB_SLAM2
使用下列命令来执行程序。要注意修改为自己的.yaml文件和刚刚存放数据集的路径。
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml /home/hadoop/test
运行结果如下图所示:
上边的图像(图片序列)一帧一帧变化,下边的相机路径也同步变化。FrameDrawer类为显示图像帧的窗口,MapDrawer为显示地图路径的窗口。图中的绿色记号为每一帧图像中识别出来的特征关键点,下图中所有的倒三角行连在一起构成了相机的运动轨迹,红色的点云为图像中的特征点。
参考教程:https://www.cnblogs.com/wxt11/p/6442687.html?utm_source=itdadao&utm_medium=referral
更多推荐
所有评论(0)