1 XML和YAML 文件简介
本节我们将一起认识XML和YAML这两种文件类型。
所谓XML,即eXtensible Markup Language,翻译成中文为“可扩展标识语 言”。首先,XML是一种元标记语言。所谓“元标记”,就是开发者可以根据自身需要定义自己的标记,比如可以定义标记<book>、<name>。任何满足XML 命名规则的名称都可以标记,这就向不同的应用程序打开了的大门。此外,XML是一种语义/结构化语言,它描述了文档的结构和语义。
YAML是“YAML Ain't a Markup Language”(译为“YAML不是一种置标语 言”)的递回缩写。在开发的这种语言时,YAML的原意是:“Yet Another Markup Language”(仍是一种置标语言),但为了强调这种语言以数据为中心,而不是以置标语言为重点,而用返璞词进行重新命名。YAML是一个可读性高,用来表达资料序列的格式。它参考了其他多种语言,包括:XML、C语言、Python、Perl,以及电子邮件格式RFC2822。
注意:.yml和.yaml同为YAML格式的后缀名
总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。
2 FileStorage类操作文件的使用引导
XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML格式的文件存储和还原各式各样的数据结构。当然,它们还可以存储和载入任意复杂的数据结构,其中就包括了OpenCV相关周边的数据结构,以及各种原始数据类型,如整数和浮点数字和文本字符串。
我们一般使用如下过程来写入或者读取数据到XML或YAML文件中。
(1)实例化一个FileStorage类的对象,用默认带参数的构造函数完成初始化,或者用FileStorage::open()成员函数辅助初始化。
(2)使用流操作符<<进行文件写入操作,或者>>进行文件读取操作,类似C++中的文件输入输出流。
(3)使用FileStorage::release(函数析构掉FileStorage类对象,同时关闭文件。 下面分别对这三个步骤进行实例讲解。
1.【第一步】XML、YAML文件的打开
(1)准备文件写操作
FileStorage是 OpenCV中XML和YAML文件的存储类,封装了所有相关的 信息。它是OpenCV从文件中读数据或向文件中写数据时必须要使用的一个类。此类的构造函数为 FileStorage::FileStorage,有两个重载,如下。
构造函数在实际使用中,方法一般有两种。
1)对于第二种带参数的构造函数,进行写操作范例如下。FileStorage fs(“abc.xml”, FileStorage::WRITE);
2)对于第一种不带参数的构造函数,可以使用其成员函数 FileStorage::open进行数据的写操作,范例如下。
(2)准备文件读操作
上面讲到的都是以FileStorage::WRITE为标识符的写操作,而读操作,采用FileStorage::READ 标识符即可,相关示例代码如下。
1)第一种方式
2)第二种方式
另外需要注意的是,上面的这些操作示例是对XML 文件为例子作演示的,而对 YAML文件,操作方法是类似的,就是将XML文件换为YAML文件即可。
2.【第二步】进行文件读写操作
(1)文本和数字的输入和输出
定义好FileStorage类对象之后,写入文件可以使用”
而读取文件,使用”>>”运算符,例如:
(2)OpenCV数据结构的输入和输出
关于OpenCV数据结构的输入和输出,和基本C++形式相同,范例如下。
3.【第三步】vector(arrays)和maps的输入和输出
对于vector 结构的输入和输出,要注意在第一个元素前加上“[”,在最后一个元素前加上“]”。例如:
读取这些结构的时候,会用到FileNode 和 FileNodelterator 数据结构。对 FileStorage类的“[
”操作符会返回FileNode数据类型;对于一连串的node,可以使用FileNodeIterator结构,例如:
4.【第四步】文件关闭
需要注意的是,文件关闭操作会在FileStorage类销毁时自动进行,但我们也可显式调用其析构函数 FileStorage::release()实现。FileStorage::release()函数会析构 掉FileStorage类对象,同时关闭文件。
调用过程非常简单,如下。
通过下一节实例来帮助大家将以上知识融会贯通。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net