对XML和YAML文件实现I/O操作

1、文件的打开关闭

XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如:

string filename = "I.xml";
FileStorage fs(filename, FileStorage::WRITE);
\\...
fs.open(filename, FileStorage::READ);

文件关闭操作会在FileStorage结构销毁时自动进行,但也可调用如下函数实现

fs.release();

2.文本和数字的输入和输出

写入文件使用  <<  运算符,例如:

fs << "iterationNr" << 100;

读取文件,使用 >> 运算符,例如

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

3. OpenCV数据结构的输入和输出,和基本的C++形式相同

Mat R = Mat_<uchar >::eye (3, 3),
T = Mat_<double>::zeros(3, 1);
fs << "R" << R; // Write cv::Mat
fs << "T" << T;
fs["R"] >> R; // Read cv::Mat
fs["T"] >> T;

4. vector(arrays) 和 maps的输入和输出

vector要注意在第一个元素前加上“[”,在最后一个元素前加上"]"。例如:

fs << "strings" << "["; // text - string sequence
fs << "image1.jpg" << "Awesomeness" << "baboon.jpg";
fs << "]"; // close sequence

对于map结构的操作使用的符号是"{"和"}",例如

fs << "Mapping"; // text - mapping
fs << "{" << "One" << 1;
fs << "Two" << 2 << "}";

读取这些结构的时候,会用到FileNode和FileNodeIterator数据结构。对FileStorage类的[]操作符会返回FileNode数据类型,对于一连串的node,可以使用FileNodeIterator结构,例如:

5、文件读取

FileNode n = fs["strings"]; // Read string sequence – Get node
if (n.type() != FileNode::SEQ)
{
cerr << "strings is not a sequence! FAIL" << endl;
return 1;
}
FileNodeIterator it = n.begin(), it_end = n.end(); // Go through the node
for (; it != it_end; ++it)
cout << (string)*it << endl;
 

6、例子介绍

 
if (filename.empty())
    {
        return 0;
    }
    cv::FileStorage fs(filename,cv::FileStorage::WRITE);
    if(!fs.isOpened())
    {
        return 0;
    }
    fs<<"preFilterCap"<<stBM.state->preFilterCap;
    fs<<"SADWindowSize"<<stBM.state->SADWindowSize;
    fs<<"minDisparity"<<stBM.state->minDisparity;
    fs<<"numberOfDisparities"<<stBM.state->numberOfDisparities;
    fs<<"textureThreshold"<<stBM.state->textureThreshold;
    fs<<"uniquenessRatio"<<stBM.state->uniquenessRatio;
    fs<<"speckleWindowSize"<<stBM.state->speckleWindowSize;
    fs<<"speckleRange"<<stBM.state->speckleRange;
    fs<<"leftValidArea" ;
    fs<<"{"<<"roi1x"<<stBM.state->roi1.x;
    fs<<"roi1y"<<stBM.state->roi1.y;
    fs<<"roi1width"<<stBM.state->roi1.width;
    fs<<"roi1height"<<stBM.state->roi1.height;
    fs<<"}" ;
    fs<<"rightValidArea" ;
    fs<<"{"<<"roi2x"<<stBM.state->roi2.x;
    fs<<"roi2y"<<stBM.state->roi2.y;
    fs<<"roi2width"<<stBM.state->roi2.width;
    fs<<"roi2height"<<stBM.state->roi2.height;
    fs<<"}" ;
    fs.release();
 
 

7、实验结果

时间: 2024-11-07 01:35:00

对XML和YAML文件实现I/O操作的相关文章

OPENCV(3) &mdash;&mdash; 对XML和YAML文件实现I/O 操作

XML\YAML文件在OpenCV中的数据结构为FileStorage string filename = "I.xml"; FileStorage fs(filename, FileStorage::WRITE); \\... fs.open(filename, FileStorage::READ); fs.release();   写入文件使用  <<  运算符 ,读取文件,使用 >> 运算符 fs << "iterationNr&qu

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— File Input and Output using XML and YAML files

2.9XML和YAML格式作为文件输入输出 目标 你会从文中找到下面问题的答案: 1.如何从OpenCV使用的YAML或者XML文件中读取和打印文字条目.? 2.对于OpenCV数据结构如何做到相同的事情? 3.对你的数据结构如何做到? 4.OpenCV的数据结构,例如FileStorage,FileNode或者FileNodeIterator的使用方法. 源代码 你可以从这里下载代码或者从OpenCV的源代码库的samples/cpp/tutorial_code/core/file_input

利用opencv的FileStorage类实现XML/YAML文件的读写

FileStorage是opencv2.0以后专门用来读写XML/YAML文件的类,标准的C++实现.利用好XML文件可以极大地方便我们对中间数据的处理. 官方文档: (1) http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.html#fileinputoutputxmlyaml (2) htt

python解析yaml文件

YAML语法规则: http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/ 下载PyYAML: http://www.yaml.org/ 解压安装: python setup.py install 1.新建test.yaml文件,内容如下: name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - nam

8.模块介绍 time &amp;datetime模块 random os sys shutil json &amp; picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式

本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.p

OpenCV Tutorials &mdash;&mdash; File Input and Output using XML and YAML files

They are two kinds of data structures you may serialize: mappings(like the STL map) and element sequence (like the STL vector>. The difference between these is that in a map every element has a unique name through what you may access it. For sequence

Python读取Yaml文件

近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现. 既然有这么多好处,为什么不用呢,随后开始研究在Python中怎么读取Yaml文件,下面我们来看下: 1.首先需要下载Python的yaml库PyYAML,下载地址:http://pyyaml.org/,安装过程就省略...... 2.建立一个.py文件 3.import yaml 4.f = o

js便签笔记(8)——js加载XML字符串或文件

1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open("GET", "data.xml", false); xhr.send(null); var xmlDoc = xhr.responseXML; console.log(xmlDoc

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ?Copyright 蕃薯耀 2017年9月13日 http://www.cnblogs.com/fanshuyao/ 直接上代码: import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.ref