自己录制数据集_Tango

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a356337092/article/details/65635554

最近在用TUM提供的数据集跑完ORB_SLAM2后:TUM数据集
想跑一下自己录制的数据集,因为这个格式问题纠结了半天,现在总结以下过程和经验。
用Tango录制一段视频后,用MATLAB处理视频,将其变成图像。刚开始想的很简单,以前也处理过,用VideoReader,将其变成以数字增序1,2,……命名的图像集,但是发现这样没有考虑到时间戳(Timestamp),会影响到ORB_SLAM2的入口。
所以程序改为以下:

videoObj = VideoReader('VID_20170323_100734.3gp');%读视频文件
nframes = get(videoObj, 'NumberOfFrames');%获取视频文件帧个数
pertime=1/30;

 for k = 1 : nframes% 读取数据
     frame = read(videoObj,k);
   %  imshow(frame);%显示帧
   %  imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 不用这样的方式保存帧
    B = imresize(frame,[270 480]);
   imwrite(B,strcat(num2str(1000000000+pertime*k),'.png'),'png');% 保存帧,s为单位!
end

Tips:保存名字是不要简单地用k命名,而是1000000000+pertime*k*1000*1000,pertime由帧率得出,视频的帧率为30,1000000000是为了让图像按照原来的拍摄序列排序;
一定要以秒为单位,否则不能运行

存完图像以后需要设置rgb.txt,告诉ORB_SLAM2时间戳对应的图像,比如下图所示:
rgb.txt
需要以下代码:

img_dir =dir('./rgb/*.png');
Imnum=length(img_dir);%个数

fid=fopen('rgb.txt','w');
 for i=1:Imnum
a=img_dir(i).name;
indlas=strfind(a,'.');  
b=a(1:indlas-1);  
fprintf(fid,'%s',b);
fprintf(fid,'%s',' ');
fprintf(fid,'%s','rgb/');
fprintf(fid,'%s\n',a);
%fprintf(fid,'%s',\n);
 end
 fclose(fid);

猜你喜欢

转载自blog.csdn.net/a356337092/article/details/65635554