opencv(二):FileStorage类

opencv FileStorage类

使用这个工具类,我们可以将 opencv 中的数据结构(或者int,float,string)保存到 XML/YAML 文件中去。或者从XML/YAML文件中加载这些数据。

这个类的声明在 “opencv2\core.hpp” 头文件中

保存

代码一:

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

fs <<"name" << "keithyin";
fs<< "age"<<18;
//等价于
fs <<"name" << "keithyim"<<"age"<<18;

fs.release();
<?xml version="1.0"?>
<opencv_storage>
<name>keithyim</name>
<age>18</age>
</opencv_storage>

代码二:

FileStorage fs("test.xml", FileStorage::WRITE);
fs <<"name" << "[" <<"first name"<<"keith" <<"last name"<<"yin"<<"]";
fs.release();
<?xml version="1.0"?>
<opencv_storage>
<name>
  "first name" keith "last name" yin
</name>
</opencv_storage>

看出有”[]” 和 没 “[]”的不同之处了吗。”[]”表示里面的东西是个序列 string

代码三:

FileStorage fs("test.xml", FileStorage::WRITE);
    fs <<"name" << "{" <<"first_name"<<"keith" <<"last_name"<<"yin"<<"}";
    fs.release();
<?xml version="1.0"?>
<opencv_storage>
<name>
  <first_name>keith</first_name>
  <last_name>yin</last_name></name>
</opencv_storage>

{}表示里面的东西还是键值对。

读取

FileStorage fs("test.xml", FileStorage::READ);
string name;
fs["name"]["first_name"] >> name;
cout << name << endl;
fs.release();
keith

这样就读出来了。

存储Mat类型数据

void test(){
    FileStorage fs("test.xml", FileStorage::WRITE);
    Mat mat(2, 2, CV_8UC3);
    fs << "mat_val" << mat;
    fs.release();
}

test.xml中数据的内容是:

<?xml version="1.0"?>
<opencv_storage>
<mat_val type_id="opencv-matrix">
  <rows>2</rows>
  <cols>2</cols>
  <dt>"3u"</dt>
  <data>
    205 205 205 205 205 205 205 205 205 205 205 205</data></mat_val>
</opencv_storage>

读取保存的Mat类型数据

void test(){
    FileStorage fs("test.xml", FileStorage::READ);
    Mat mat;
    fs["mat_val"] >> mat;
    cout << mat << endl;
    fs.release();
}
[205, 205, 205, 205, 205, 205;
  205, 205, 205, 205, 205, 205]

参考资料

http://www.cnblogs.com/fourseas/p/5519681.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统和大数据处理

Go语言Tips

转型到Go以后,因为语言的不熟悉,以往很常见的一些操作有时候也需要去Google一下。这里将一些结果记录下来,方便日后查阅。

1092
来自专栏Golang语言社区

GoStub框架使用指南

序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架: GoConvey GoStub GoMock M...

4447
来自专栏進无尽的文章

编码篇-学会小用宏和条件编译

宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行。而在更...

911
来自专栏hbbliyong

WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

一、如何从 Datagrid 中获得单元格的内容    DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemCon...

3217
来自专栏令仔很忙

存储过程--机房收费系统

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

651
来自专栏余林丰

Java IO(2)阻塞式输入输出(BIO)

  在上文中《Java IO(1)基础知识——字节与字符》了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解。   本文所...

2115
来自专栏Danny的专栏

System.Data.SqlClient.SqlException: 将截断字符串或二进制数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1204
来自专栏SeanCheney的专栏

《Pandas Cookbook》第08章 数据清理1. 用stack清理变量值作为列名2. 用melt清理变量值作为列名3. 同时stack多组变量4. 反转stacked数据5. 分组聚合后uns

第01章 Pandas基础 第02章 DataFrame运算 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 索引对齐 ...

702
来自专栏MasiMaro 的技术博文

PE解析器的编写(四)——数据目录表的解析

在PE结构中最重要的就是区块表和数据目录表,上节已经说明了如何解析区块表,下面就是数据目录表,在数据目录表中一般只关心导入表,导出表和资源这几个部分,但是资源实...

1102
来自专栏Petrichor的专栏

Python: 标准异常树

1123

扫码关注云+社区