ORB-SLAM3的源码学习: Settings.cc:settings构造函数

news/2025/2/19 16:37:09/

前言

配置文件的相关的构造函数

1.函数声明 

settings的构造函数

Settings::Settings(const std::string &configFile, const int &sensor) 
: bNeedToUndistort_(false), bNeedToRectify_(false), bNeedToResize1_(false), bNeedToResize2_(false)

这个构造函数接受两个参数:

1.configFile:配置文件的路径。

2.sensor:传感器类型。

列表初始化成员变量bNeedToUndistort_bNeedToRectify_bNeedToResize1_bNeedToResize2_,它们表示在设置过程中是否需要进行去畸变、校正、缩放等操作。

2.函数定义

1.打开配置文件 

// Open settings filecv::FileStorage fSettings(configFile, cv::FileStorage::READ);if (!fSettings.isOpened()){cerr << "[ERROR]: could not open configuration file at: " << configFile << endl;cerr << "Aborting..." << endl;exit(-1);}else{cout << "Loading settings from " << configFile << endl;}

使用 OpenCV 的 cv::FileStorage 打开传入的配置文件。如果文件打开失败,打印错误信息并终止程序。如果文件成功打开,输出 "Loading settings from" 配置文件路径。

2.读取相机参数

1.读取相机1参数

调用settings文件中定义的readCamera1函数来提取配置文件中的相机参数。

// Read first camerareadCamera1(fSettings);cout << "\t-Loaded camera 1" << endl;

2.读取相机2参数 

如果是双目模式则还需要读取第二个相机的参数。

// Read second camera if stereo (not rectified)if (sensor_ == System::STEREO || sensor_ == System::IMU_STEREO){readCamera2(fSettings);cout << "\t-Loaded camera 2" << endl;}

3.读取图像信息

// Read first camerareadCamera1(fSettings);cout << "\t-Loaded camera 1" << endl;

4.读取IMU参数

如果是imu模式就需要读取相关参数

if (sensor_ == System::IMU_MONOCULAR || sensor_ == System::IMU_STEREO || sensor_ == System::IMU_RGBD){readIMU(fSettings);cout << "\t-Loaded IMU calibration" << endl;}

5.读取RGBD参数 

如果是RGBD模式就需读取相关参数

if (sensor_ == System::RGBD || sensor_ == System::IMU_RGBD){readRGBD(fSettings);cout << "\t-Loaded RGB-D calibration" << endl;}

6.读取配置文件中的其余参数

readORB(fSettings);cout << "\t-Loaded ORB settings" << endl;readViewer(fSettings);cout << "\t-Loaded viewer settings" << endl;readLoadAndSave(fSettings);cout << "\t-Loaded Atlas settings" << endl;readOtherParameters(fSettings);cout << "\t-Loaded misc parameters" << endl;

7 .检查是否需要矫正操作

如果需要进行图像的校正(例如,去畸变),调用 precomputeRectificationMaps() 预计算校正地图。

 if (bNeedToRectify_){precomputeRectificationMaps();cout << "\t-Computed rectification maps" << endl;}

完整的代码 

Settings::Settings(const std::string &configFile, const int &sensor) : bNeedToUndistort_(false), bNeedToRectify_(false), bNeedToResize1_(false), bNeedToResize2_(false)
{sensor_ = sensor;// Open settings filecv::FileStorage fSettings(configFile, cv::FileStorage::READ);if (!fSettings.isOpened()){cerr << "[ERROR]: could not open configuration file at: " << configFile << endl;cerr << "Aborting..." << endl;exit(-1);}else{cout << "Loading settings from " << configFile << endl;}// Read first camerareadCamera1(fSettings);cout << "\t-Loaded camera 1" << endl;// Read second camera if stereo (not rectified)if (sensor_ == System::STEREO || sensor_ == System::IMU_STEREO){readCamera2(fSettings);cout << "\t-Loaded camera 2" << endl;}// Read image inforeadImageInfo(fSettings);cout << "\t-Loaded image info" << endl;if (sensor_ == System::IMU_MONOCULAR || sensor_ == System::IMU_STEREO || sensor_ == System::IMU_RGBD){readIMU(fSettings);cout << "\t-Loaded IMU calibration" << endl;}if (sensor_ == System::RGBD || sensor_ == System::IMU_RGBD){readRGBD(fSettings);cout << "\t-Loaded RGB-D calibration" << endl;}readORB(fSettings);cout << "\t-Loaded ORB settings" << endl;readViewer(fSettings);cout << "\t-Loaded viewer settings" << endl;readLoadAndSave(fSettings);cout << "\t-Loaded Atlas settings" << endl;readOtherParameters(fSettings);cout << "\t-Loaded misc parameters" << endl;if (bNeedToRectify_){precomputeRectificationMaps();cout << "\t-Computed rectification maps" << endl;}cout << "----------------------------------" << endl;
}

结束语

以上就是我学习到的内容,如果对您有帮助请多多支持我,如果哪里有问题欢迎大家在评论区积极讨论,我看到会及时回复。


http://www.ppmy.cn/news/1572455.html

相关文章

spring 中 AspectJ 基于 XML 的实现分析

前面的文章介绍了 spring 引入 AspectJ 之后&#xff0c;基于注解实现 AOP 的过程分析&#xff0c;今天我们来看下AspectJ 基于 XML 的 AOP 实现逻辑。 XML 的实现示例可以参考 AspectJ 对于 AOP 的实现。 aop:config 标签解析 先去 spring-aop 模块下&#xff0c;META-INF/…

哈希:LeetCode49. 字母异位词分组 128.最长连续序列

49. 字母异位词分组 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate",…

网页五子棋——用户模块

目录 用户注册 注册时序图 约定前后端交互接口 后端实现 controller 层接口设计 service 层接口设计 dao 层接口设计 全局异常处理 接口测试 前端实现 register.html css common.css register.css js 注册模块测试 用户登录 登录时序图 约定前后端交互接口 …

Python Pandas(11):Pandas 数据可视化

数据可视化是数据分析中的重要环节&#xff0c;它帮助我们更好地理解和解释数据的模式、趋势和关系。通过图形、图表等形式&#xff0c;数据可视化将复杂的数字和统计信息转化为易于理解的图像&#xff0c;从而便于做出决策。Pandas 提供了与 Matplotlib 和 Seaborn 等可视化库…

Pytest自动化测试框架总结

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、pytest简介 pytest是Python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效…

什么是FCC认证

联邦通信委员会&#xff08;FCC&#xff09;认证是美国一种强制性的认证&#xff0c;确保电子设备在上市前符合特定标准。 联邦通讯委员会&#xff08;FCC&#xff09;----管理进口和使用无线电频率装置&#xff0c;包括电脑、传真机、电子装置、无线电接收和传输设备、无线电…

ubuntu下ollama/vllm两种方式在本地部署Deepseek-R1

1.前言 今年过年,deepseek一下子爆火,导致我前段时间好好用的官网直接挤爆了,一直转圈圈到没心思过了,天天挂热搜,直接导致我的科研工作受阻(dog),好吧,话不多说,看看怎么在本地部署deepseek丝滑享受以及白嫖一下api体验>_<! 部署环境: 系统:ubuntu22.04 显…

Next.js【详解】获取数据(访问接口)

Next.js 中分为 服务端组件 和 客户端组件&#xff0c;内置的获取数据各不相同 服务端组件 方式1 – 使用 fetch export default async function Page() {const data await fetch(https://api.vercel.app/blog)const posts await data.json()return (<ul>{posts.map((…