ORB-SLAM 2跑通自己的數據集
一 、拍攝視頻並轉化爲圖片:
創建python文件,命名爲:setVedio.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('home.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文件:
python setVedio.py
二、準備索引目錄文件:
創建python文件,命名爲:file_text.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()
python file_text.py
在生成的rgb.txt文件 開始前三行,是無法識別的,所以可以加
# color images
# file: 'My_slam.bag'
# timestamp filename
如圖:
三、生成自己的參數配置文件TUM.yaml。複製TUM1.yaml,並修改參數即可。
本人是用Examples/Monocular/TUM1.yaml沒做修改,先跑跑試試。
四、ORB-SLAM2所在的目錄並運行如下命令即可:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/weiweu/My_SLAM/dataset1
五、本次實驗存在的問題:
在運行時,能看到ORB-SLAM2:Current Frame的窗口一直在實時播放數據,但是ORB-SLAM2:Map Viewer的窗口始終沒有發生任何改變,說明一直沒有地圖信息。但是運行公開的數據集就有地圖信息。這是個神奇的點!(此問題有待解決,等待深入學習ORB-SLAM2後在來解決此問題)