2 ORBSLAM2 测试自己拍摄的数据集
使用手机、摄像机等设备拍摄视频,对应我们只能使用单目 (Monocular)。
2.1对相机标定
首先我们要对相机进行标定,使用 MATLAB 里面的标定工具包。标定好之
后创建一个单目模式下的 yaml,复制 TUM1.yaml 修改标定参数即可。
注意: 因为现在手机比较智能,要注意手机录像清晰度是可调节的,对应标
定出的数不同。一定要保证标定时的清晰度一定要和录像时的一样。标定时最
好不要选择拍照的方式,因为拍照和录像手机清晰度基本上也是不一样的。可
以用录像的方式来获取标定的数据,再用下面的代码隔几十帧取一帧,来实现
标定。
2.2制作自己的数据集
录制一段视频,将视频转换成 ORBSLAM2 数据集的格式。代码如下可以指
定保存的图像的格式和隔多少帧保存一张。
/* Author(s):
* 哇哈哈(WHH)
*/
#include <iostream>
#include "opencv2/opencv.hpp"
#include <string>
#include <fstream>
using namespace cv;
void TransV2I();
// 描述:将视频帧转成图片输出
int main()
{
TransV2I();
return 0;
}
void TransV2I()
{
std::cout<<"Enter the video for trans: ";
std::string vido;
std::cin>>vido;
// load video
VideoCapture cap(vido);
//get info of video
long TotalFrameNumber = cap.get(CV_CAP_PROP_FRAME_COUNT);
int FrameRate = cap.get(CV_CAP_PROP_FPS);
std::cout<<"Frame rate :"<<FrameRate<<std::endl;
std::cout<< "Total frames: " << TotalFrameNumber <<std::endl;
//get rate for capture
Mat frame;
bool toStop = true;
long CurrentFrame = 100000;
std::cout<<"Save one after how many frames: ";
int Rate;
std::cin>>Rate;
//get format for images type
std::string fomat;
std::cout<<"Enter image format: ";
std::cin>>fomat;
//path to write
std::string folderpath = "DataforORBSLAM2/rgb/";
std::string command;
command = "mkdir -p "+ folderpath;
system(command.c_str());
//write txt file
std::ofstream OutFile;
std::string FilePath = "dataforslam/rgb.txt";
OutFile.open(FilePath); //打开文件
//write info of images
OutFile<<"# color images"<<std::endl;
OutFile<<"#total "<<TotalFrameNumber<<" images"<<std::endl;
while (toStop){
cap.read(frame);
if(CurrentFrame%Rate == 0){
std::stringstream str1, str2;
str1<<"6269."<<CurrentFrame<<"."<<fomat;
str2<<"6269."<<CurrentFrame;
imwrite(folderpath+str1.str(), frame);
OutFile <<str2.str()<<" rgb/"+str1.str()<< std::endl;
}
if((CurrentFrame-100000)>TotalFrameNumber-1){
toStop = false;
}
CurrentFrame++;
}
OutFile.close();
std::cout<<"Done!\n";
}
3 OpenMVS 使用 ORBSLAM2 的位姿进行三维重建
参考https://blog.csdn.net/qq34325730/article/details/118360533
这里需要对 ORBSLAM2 和 OpenMVS 更改, 下载更改后的模块替换就行。
记得把 DensifyPointCloud.cpp 里面的一个屏蔽符去掉如下图:
4效果
文章来源:https://www.toymoban.com/news/detail-419369.html
拍的数据集不是很行,效果一般。对建筑表面进行重建效果会比较好。文章来源地址https://www.toymoban.com/news/detail-419369.html
到了这里,关于制作自己的ORBSLAM2数据集,并实现三维重建(代码自己写的)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!