本项目的运行环境为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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐