FileStorage类

该类有两个构造函数

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

准备

对应第一种方法

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

对应第二种方法

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

第一种方式

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

第二种方式

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

读写

可用"<<"运算符进行写操作

fs << "iterationNr" << 100;

用">>"运算符进行读操作

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

数据结构输入输出

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"] >> R;
fs["T"] >> T;

vector(arrays) 和maps的输入输出

对于vector结构的输入和输出,要注意在第一个元素前加上“[”,在最后一个元素后加上“]”。

fs << "strings" << "[";   //开始读入string文本序列
fs << "image1.jpg" << "Awesomeness" << "baboon.jpg";
fs << "]"; //关闭序列

对于map结构的操作,使用的符号是“{” 和 “}”

fs << "Mappimg";  //开始读入mapping文本
fs << "{" << "One" << 1;
fs << "Two" << 2 << "}";

读取这些结构的时候会用到FileNode和FileNodeIterator数据结构。对FileStorage类的“[" 、 "]”操作符会返回FileNode数据结构;对于一连串的node可以使用FileNodeIterator结构。

FileNode n = fs["strings"];   //读取字符串序列以得到节点
if (n.type() != FileNode::SEQ) {
std::cerr << "发生错误!字符串不是一个序列!" << '\n';
return 1;
}
FileNodeIterator it = n.begin(), it_end = n.end(); //遍历节点
for (; it != it_end; ++it)) {
std::cout << (string)*it << '\n';
}

文件关闭

文件关闭操作会在FileStorage类销毁时自动进行,但也可以显示调用其析构函数FileStorage::release()实现。FileStorage::release()函数会析构掉FileStorage类对象,同时关闭文件。

fs.release();

OpenCV之XML和YAML文件读写的更多相关文章

  1. OpenCV——输入输出XML和YAML文件

  2. OpenCV 输入输出XML和YAML文件

    #include <opencv2/core/core.hpp> #include <iostream> #include <string> using names ...

  3. opencv 3 core组件进阶(3 离散傅里叶变换;输入输出XML和YAML文件)

    离散傅里叶变换 #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" ...

  4. OPENCV(3) —— 对XML和YAML文件实现I/O 操作

    XML\YAML文件在OpenCV中的数据结构为FileStorage string filename = "I.xml"; FileStorage fs(filename, Fi ...

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

    1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStora ...

  6. python yaml文件读写

    import yaml yaml_dict={"} with open("a.yaml", "w") as f: yaml.safe_dump(yam ...

  7. OpenCV教程(42) xml/yaml文件的读写

    参考资料: http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html #include "opencv2/openc ...

  8. wp8.1 Study11:APP里文件读写和使用XML和Json序列化

    一.文件读写 1.基本操作(使用FileIO API) 这个方法在上一个stduy已经学过,那么贴出来复习下,代码如下: private async void writeTextToLocalStor ...

  9. OpenCV 读取.xml文件

    OpenCV 只提供了读取和存储.xml和.yml 文件格式的函数. 读取.xml文件的C++例程如下: cv::FileStorage fs; //OpenCV 读XML文件流 cv::Mat De ...

随机推荐

  1. CSS3之border-image的使用

    最近,我在项目开发中遇到这样的问题. 要给这个tab的底部的蓝线左右加上圆角. 然而,这个元素实际如上图所示,只是active的时候加了个underline的类,蓝线并没有单独的html. 若给这个s ...

  2. ES6 class(基本语法+方法)

    静态属性与静态方法 1. 不会被类实例所拥有的属性与方法 只是类自身拥有2. 只能通过类调用 静态方法与普通方法重名,不会冲突static 关键字(静态方法) 静态属性类名.属性名 = 属性值; 1. ...

  3. 【32】Padding(填充)原理讲解

    Padding 为了构建深度神经网络,你需要学会使用的一个基本的卷积操作就是padding,让我们来看看它是如何工作的.   我们在之前笔记中看到,如果你用一个3×3的过滤器卷积一个6×6的图像,你最 ...

  4. 关于Comparable和Comparator那些事

    在实际项目开发过程中,我们经常需要对某个对象或者某个集合中的元素进行排序,常用的两种方式是实现某个接口.常见的可以实现比较功能的接口有Comparable接口和 Comparator接口,那么这两个又 ...

  5. 提取 Microsoft.ReportViewer等dll

    ReportViewer 在开发环境没问题 发布以后可能会提示找不到 Microsoft.ReportViewer 下的几个dll 可以用用下面脚本在开发服务器上提取 相应的dll @SET dest ...

  6. ASP.NET常用内置对象(三)Server

    Server对象是HttpServerUtility的一个实例,也是上下文对象HttpContext的一个属性,提供用于处理Web请求的Helper方法. Server.MapPath("& ...

  7. C语言实现链式二叉树静态创建,(先序遍历),(中序遍历),(后续遍历)

    #include <stdio.h>#include <stdlib.h> struct BTNode{ char data ; struct BTNode * pLchild ...

  8. socket编程执行远程命令实现_python

    一.单客户端连接的例子: 服务端: import socket,os,subprocess server=socket.socket() server.bind(('localhost',1234)) ...

  9. oracle 处理Session不够用

    1.执行语句 scope=spfile; scope=spfile; 2.查看现在的链接数 select count(*) from v$process --当前正在使用的 select value ...

  10. 在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结

    当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便 但当我在把代码都写完后,发现一个问题就是页面打开时 虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容都 ...