opencv(20):输入输出XML和YAML文件

1. XML和YAML文件简介

本节我们将一起认识XML和、YAML这两种文件类型。

所谓XML,即eXtensibleMarkupLanguage,翻译成中文为“可扩展标识语言”。首先,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所完成的任务。

2 . Filestorage类操作文件的使用引导

XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML格式的文件存储和还原各式各样的数据结构。当然,它们还可以存储和载入任意复
杂的数据结构,其中就包括了OpenCV相关周边的数据结构,以及各种原始数据类型,如整数和浮点数字和文本字符串.

我们一般使用如下过程来写入或者读取数据到XML或YAML文件中。
(1)实例化一个FileStorage类的对象,用默认带参数的构造函數完成初始化,或者用FileStorage::open()成员函数辅助初始化。
(2)使用流操作符<<进行文件写入操作,或者>>进行文件读取操作,类似c++中的文件输入输出流。
(3)使用FileStorage::release()函数析构掉FileStorage类对象,同时关闭文件。

下面分别对这三个步骤进行实例讲解。

  1. 〖第一步〗XML、YAML文件的打开
    (1)准备文件写操作
    FileStoruge是OpenCV中XML和YAML文件的存储类,封装了所有相关的信息。它是OpenCV从文件中读数据或向文件中写数据时必须要使用的一个类。

    此类的构造函数为FileStorage::FileStorage,有两个重载,如下。
    C++:

    FiIeStOrage::FileStorage
    

    C++:

    FiIeStorage::FileStorage(const string & source,int flags,const string& encoding=string())
    

    构造函数在实际使用中,方法一般有两种。
    1)对于第二种带参数的构造函数,进行写操作范例如下。

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

    2)对于第一种不带参数的构造函数,可以使用其成员函数FileStorage::open进行数据的与操作,范例如下。

    FileStorage fs;
    fs.open("abc.xml",FileStorage::READ);
    

    (2)准备文件读操作
    上面讲到的都是以FileStorage::WRITE为标识符的写操作,而读操作,采用FileStronge::READ标识符即可,相关示例代码如下。
    1)第一种方式

    FileStorage fs("abc.xml",FileStorage::READ);
    

    2)第二种方式

    FileStorage fs;
    	fs.open("abc.xml",FileStroage::READ);
    
  2. 〖第二步〗进行文件的读取操作
    (1)文本和数字的输入和输出
    定义好FileStorage类对象之后,写入文件可以使用“<<”运算符,例如:

    fs<<"iterationNr"<<100;
    

    而读取文件,使用“>>”运算符,例如:

    int itNr;
    fs["iterationNr"]>>itNr;
    itNr=(int)fs["iterationNr"];
    

    (2)OpenCV数据结构的输入和输出
    关于OpenCV数据结构的输入和输出,和基本的C++形式相同,范例如下。

    //数据结构的初始化
    	Mat R = Mat_<uchar>::eye(3, 3);
    	Mat T = Mat_<double>::zeros(3, 1);
    
    	//向Mat中写入数据
    	fs << "R" << R;
    	fs << "T" << T;
    
    	//从Mat中读出数据
    	fs["R"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值