yamlcpp遍历_OpenCV|C++从文件或终端读写yaml或txt文件

yaml文件用法总结

总结一下就是为了读写出多种多样格式并且减少依赖可以选择std::fstream的ifstream和ofstream)。

使用yaml-cpp库可以将yaml文件以节点YAML::Node的形式载入YAML::LoadFile,然后用std::fstream的ofstream写入文件。

读文件的时候首选cv::fileStorage因为可以很好的提取矩阵,其次选择std::fstream的ifstream麻烦在于要一行一行的读取解析耗费心力。

整齐划一的格式例如文件路径适合std::fstream例如ORB_SLAM2中载入图片和字典。

ORB_SLAM2中用到的地方

多种多样的配置参数和相机参数适合用cv::fileStorage可以更好的解析供OpenCV使用。

ORB_SLAM2的LoadImages函数用std::ifstream读取txt文件中的图片。

ORB_SLAM2的saved_trajectory函数用std::ofstream保存轨迹和位姿到txt文件。

ORB_SLAM2的fsSettings函数用cv::FileStorage::READ读取读取yaml文件中的相机和配置参数。

下面是一些常见的yaml文件格式

Multi-Camera Parallel Tracking and Mapping (MCPTAM)的标定文件

MultiCol-SLAM is a multi-fisheye camera SLAM system的标定文件

ROS Navigation的参数文件

安装yaml-cpp库

git clone https://github.com/jbeder/yaml-cpp.git

cd yaml-cpp

mkdir build && cd build

cmake -DYAML_BUILD_SHARED_LIBS=ON ..

make -j4

sudo make install

YAML基本语法

大小写敏感

使用空格缩进表示层级关系

同层级的元素左侧对齐

#表示注释

对象

键值对的集合 key: value冒号后面要加一个空格

可以一行只写一个键值对

也可以把所有键值对写成一个行内对象

hash: { name: Steve, foo: bar }

还可以使用缩进表示层级关系

key:

child-key: value

child-key2: value2

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

?

- complexkey1

- complexkey2

:

- complexvalue1

- complexvalue2

数组

一组连词线 - 开头按次序排列的值,构成一个数组。

- A

- B

- C

YAML 支持多维数组,可以使用行内表示:

key: [value1, value2, ...]

数据结构的子成员是一个数组

-

- A

- B

- C

一个相对复杂的例子,意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。

companies:

-

id: 1

name: company1

price: 200W

-

id: 2

name: company2

price: 500W

数组也可以使用流式(flow)的方式表示

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

复合结构

数组和对象可以构成复合结构

languages:

- Ruby

- Perl

- Python

websites:

YAML: yaml.org

Ruby: ruby-lang.org

Python: python.org

Perl: use.perl.org

常量

纯量是最基本的不可再分的值

布尔值

boolean:

- TRUE #true,True都可以

- FALSE #false,False都可以

浮点数

float:

- 3.14

- 6.8523015e+5 #可以使用科学计数法

整数

int:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值