FileStorage函数学习记录

FileStorage函数学习记录

前言,笔者在阅读开源代码时,遇到忘记的opencv提供的对文件操作的函数FileStorage,特此记录学习。

1.XML和YAML的简介
XML,即eXtensible Markup Language(可扩展标识语言)。是一种元标记语言。

元标记语言是开发者可以根据自身需要定义自己的标记。YAML,是一个可读性高,用来表达资料序列的格式。
注: .yml和 .yaml同为YAML格式的后缀名

2.了解FileStorage 类
FileStorage是OpenCV中XML和YAML文件的储存类,封装了所有相关的信息。它是OpenCV从文件中读数据或向文件中写数据事必须要使用的一个

类。

FileStorage构造函数
不带参数:

FileStorage()

带参数:

FileStorage(const String& source, int flags, const String& encoding=String());

参数解释:
const String& source:要打开的文件的源名或要从中读取数据的文本字符串;
文件名(.xml、.yml/.yaml或.json)决定其格式(分别为XML、YAML或JSON)

int flags:操作模式,例如下面的:读取,写入,追加等
FileStorage::READ = 0, //读取
FileStorage::WRITE = 1, //写入
FileStorage::APPEND = 2, //追加(在文件末尾追加)
FileStorage::MEMORY = 4, //从源读取数据或将数据写入内部缓冲区(即<由FileStorage::Release返回)

const String& encoding=String():编码文件的编码。请注意,目前不支持UTF-16 XML编码,并且应该使用8位编码。

举个例子:
写:
带参数:

FileStorage fs("a.mxl",FileStorage::WRITE);//用写入的模式打开a.mxl文件

不带参数:

FileStorage fs;
fs.open("a.xml",FileStorage::WRITE);

读:

FileStorage fs("a.xml",FileStorage::READ)//用写入的模式打开a.mxl文件
FileStorage fs;
fs.open("a,xml",FileStorage::READ);

(2)进行文件读写操作
①文本数字的输入和输出
写入:

fs<<"iterationNr"<<100; 

在fs里写入iterationNr值为100
在这里插入图片描述

这里要解释以下xml文件的结构

  1. xml文件结构
    ①xml文件的第一行为xml文件说明,一般说明了xml的版本和编码信息;
    如图中的
<? xml version="1.0"  ?>

②xml文件的第二行为xml的起始节点,也是根节点;具体根节点的意思可自行百度了解,这里就不多赘述。
Opencv的xml文件默认的根节点为:
<opencv_storage>……</opencv_storage>
③每个xml文件有且只有一个根节点,其他节点都包含在这个根节点之内,每个节点又可以包含若干个子节点。
在这里插入图片描述

蓝色框内就是子节点
总截图为:
在这里插入图片描述

读取:
int itNr;
fs[“iterationNr”]>>itNr;
itNr =(int) fs[“iterationNr”];

此处以Mat数据类型为例:
②OpenCV数据结构的输入和输出
//数据结构初始化
Mat R = Mat_::eye(3,3);
Mat T = Mat_::zeros(3,1);
//向Mat中写入数据
fs << “R” << R;
fs << “T” << T;
//从Mat中读取数据
fs[“R”] >> R;
fs[“T”] >> T;
在这里插入图片描述

(3)vector(arrays)和maps的输入和输出
对于vector结构的输入和输出,要注意在第一个元素前加‘ [ ’,在最后一个元素前加上
‘ ] ’。
对于map结构的操作,使用的符号是‘ { ’ , ‘ } ’。

(4)文件关闭
文件关闭操作会在FileStorage类销毁时自动进行,但我们也可显式调用其析构函数FileStorage::release()实现。FileStorage::release()函数会析构掉FileStorage类对象
例如:
fs.rellease();

总结:FileStorage是OpenCV中对XML和YAML文件进行操作的存储类,可以对文件进行读入,写入,追加,值得注意的是Mat存入的结构的矩阵形式。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
09-20 399

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值