opencv下XML 文件的读写 很全滴
2015-06-11 22:02
555 查看
[cpp] view
plaincopy
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">Opencv 存储和读取XML文件使用 FileStorage 类,对于不同的数据结构,存储和读取的方式不同,下面结合例子具体分析下。</span>
头文件
[cpp] view
plaincopy
#include "opencv2/core/core.hpp"
#include <iostream>
#include <string>
#include <vector>
存储XML的代码结构
[cpp] view
plaincopy
FileStorage fs(“name.xml”, FileStorage::WRITE); //创建XML文件
if (!fs.isOpened())
{
cerr << "failed to open " << filename << endl;
}
/******************************/
/* 存储数据 */
/******************************/
fs.release();
一、一般数据的存储
1. int型数据(float, string, float 等数据类型相同)
[cpp] view
plaincopy
int num;
fs["Num"]<<num;
2. vector 数据
[cpp] view
plaincopy
vector<int> data;
for(int i=0; i<5; i++)
data.push_back(i);
fs<<"VECTOR"<<"["; // 注意要有中括号
for(vector<int>::iterator it =data.begin(); it!= data.begin(); it++)
{
fs<<(*it);
}
fs<<"]";
3. Map 数据读取
[cpp] view
plaincopy
map<string, int> data;
data.insert(map<string,int>::value_type("one", 1));
data.insert(map<string,int>::value_type("two", 2));
fs<<"MAP"<<"{";//注意要用到大括号
for(map<string,int>::iterator it = data.begin(); it!= data.end(); it++)
{
fs<<it->first<<it->second;
}
fs<<"}";
4. Opencv 中矩阵数据的存储
[cpp] view
plaincopy
Mat R = Mat_::eye(3,3);
fs<<"Mat"<<R;
二、一般数据的读取
首先需要打开XML文件
[cpp] view
plaincopy
FileStorage fs("name.xml", FileStorage::READ);
if (!fs.isOpened())
{
cerr << "failed to open " << filename << endl;
}
1. int型数据(float, string, float 等数据类型相同)
[cpp] view
plaincopy
int Num = fs["Num"];
//or
fs["Num"]>>Num;
2. vector 数据
[cpp] view
plaincopy
FileNode n = fs["VECOTR"];
if(n.type()!= FileNode::SEQ)
{
cerr<<"VECTOR is not a sequence! FAIL"<<endl;
}
for(FileNodeIterator it = n.begin(); it!=n.end(); it++)
{
cout<< *it<<endl;
}
3. Map数据
[cpp] view
plaincopy
FileNode n = fs["MAP"];
cout<<"one"<< (int)n["one"]<<endl;
cout<<"two"<< (int)n["two"]<<endl;
4. Opencv 中矩阵数据的存储
[cpp] view
plaincopy
Mat R= fs["MAT"];
三、自定义数据的存储与读取
1、首先需要先定义一个数据结构
[cpp] view
plaincopy
class MyData{
public:
MyaData()A(0){ B.clear();}
MyData(int k, Mat& m)
{
A =k;
B = m;
for(int i=0; i<A;++)
{
B.push_back(i);
}
}
int A;
vector<float> B;
Mat R;
// 定义存储函数,注意末尾处的const,缺少会出现错误
void write(FileStorage &fs) const
{
fs<<"{";//必须要有大括号
fs<<"A"<<A; //存储A
fs<<"B"<<"["; // 存储B
for(vector<float>::iterator it = B.begin(); it!=B.end(); it++)
{
fs<<(*it);
}
fs<<"]";
fs<<"R"<<R; //存储R
fs<<"}";
}
// 定义读取函数的数据
void read( FileStorage & node)
{
// 读取A
int A = node["A"];
// 读取B
FileNode n = node["B"];
if(n.type()!=cv::FileNode::SEQ)
{
cerr<<"B is not a sequence! FAIL"<<endl;
}
for(cv::FileNodeIterator it = n.begin(); it!= n.end(); it++)
cout<<(int)(*it)<<endl;
// 读取R
Mat R = node["R"];
}
};
2、定义完数据结构后需要重载两个函数
[cpp] view
plaincopy
static void write(FileStorage& fs, const std::string&, const MyData& x){
x.write(fs);
}
static void read(const FileNode& node, MyData& x, const MyData& default_value = MyData()){
if(node.empty())
x = default_value;
else
x.read(node);
}
3. 对自定义的数据惊醒存储和读取
存储
[cpp] view
plaincopy
int num = 2;
Mat R = Mat_::eye(3,3);
MyData mydata(2, R);
fs<<"MYDATA"<<mydata;
读取
[cpp] view
plaincopy
MyData *mydata = new MyData();
fs["MYDATA"]>> (*mydata);
转自 :http://blog.csdn.net/Sway_2012/article/details/23381135
plaincopy
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">Opencv 存储和读取XML文件使用 FileStorage 类,对于不同的数据结构,存储和读取的方式不同,下面结合例子具体分析下。</span>
头文件
[cpp] view
plaincopy
#include "opencv2/core/core.hpp"
#include <iostream>
#include <string>
#include <vector>
存储XML的代码结构
[cpp] view
plaincopy
FileStorage fs(“name.xml”, FileStorage::WRITE); //创建XML文件
if (!fs.isOpened())
{
cerr << "failed to open " << filename << endl;
}
/******************************/
/* 存储数据 */
/******************************/
fs.release();
一、一般数据的存储
1. int型数据(float, string, float 等数据类型相同)
[cpp] view
plaincopy
int num;
fs["Num"]<<num;
2. vector 数据
[cpp] view
plaincopy
vector<int> data;
for(int i=0; i<5; i++)
data.push_back(i);
fs<<"VECTOR"<<"["; // 注意要有中括号
for(vector<int>::iterator it =data.begin(); it!= data.begin(); it++)
{
fs<<(*it);
}
fs<<"]";
3. Map 数据读取
[cpp] view
plaincopy
map<string, int> data;
data.insert(map<string,int>::value_type("one", 1));
data.insert(map<string,int>::value_type("two", 2));
fs<<"MAP"<<"{";//注意要用到大括号
for(map<string,int>::iterator it = data.begin(); it!= data.end(); it++)
{
fs<<it->first<<it->second;
}
fs<<"}";
4. Opencv 中矩阵数据的存储
[cpp] view
plaincopy
Mat R = Mat_::eye(3,3);
fs<<"Mat"<<R;
二、一般数据的读取
首先需要打开XML文件
[cpp] view
plaincopy
FileStorage fs("name.xml", FileStorage::READ);
if (!fs.isOpened())
{
cerr << "failed to open " << filename << endl;
}
1. int型数据(float, string, float 等数据类型相同)
[cpp] view
plaincopy
int Num = fs["Num"];
//or
fs["Num"]>>Num;
2. vector 数据
[cpp] view
plaincopy
FileNode n = fs["VECOTR"];
if(n.type()!= FileNode::SEQ)
{
cerr<<"VECTOR is not a sequence! FAIL"<<endl;
}
for(FileNodeIterator it = n.begin(); it!=n.end(); it++)
{
cout<< *it<<endl;
}
3. Map数据
[cpp] view
plaincopy
FileNode n = fs["MAP"];
cout<<"one"<< (int)n["one"]<<endl;
cout<<"two"<< (int)n["two"]<<endl;
4. Opencv 中矩阵数据的存储
[cpp] view
plaincopy
Mat R= fs["MAT"];
三、自定义数据的存储与读取
1、首先需要先定义一个数据结构
[cpp] view
plaincopy
class MyData{
public:
MyaData()A(0){ B.clear();}
MyData(int k, Mat& m)
{
A =k;
B = m;
for(int i=0; i<A;++)
{
B.push_back(i);
}
}
int A;
vector<float> B;
Mat R;
// 定义存储函数,注意末尾处的const,缺少会出现错误
void write(FileStorage &fs) const
{
fs<<"{";//必须要有大括号
fs<<"A"<<A; //存储A
fs<<"B"<<"["; // 存储B
for(vector<float>::iterator it = B.begin(); it!=B.end(); it++)
{
fs<<(*it);
}
fs<<"]";
fs<<"R"<<R; //存储R
fs<<"}";
}
// 定义读取函数的数据
void read( FileStorage & node)
{
// 读取A
int A = node["A"];
// 读取B
FileNode n = node["B"];
if(n.type()!=cv::FileNode::SEQ)
{
cerr<<"B is not a sequence! FAIL"<<endl;
}
for(cv::FileNodeIterator it = n.begin(); it!= n.end(); it++)
cout<<(int)(*it)<<endl;
// 读取R
Mat R = node["R"];
}
};
2、定义完数据结构后需要重载两个函数
[cpp] view
plaincopy
static void write(FileStorage& fs, const std::string&, const MyData& x){
x.write(fs);
}
static void read(const FileNode& node, MyData& x, const MyData& default_value = MyData()){
if(node.empty())
x = default_value;
else
x.read(node);
}
3. 对自定义的数据惊醒存储和读取
存储
[cpp] view
plaincopy
int num = 2;
Mat R = Mat_::eye(3,3);
MyData mydata(2, R);
fs<<"MYDATA"<<mydata;
读取
[cpp] view
plaincopy
MyData *mydata = new MyData();
fs["MYDATA"]>> (*mydata);
转自 :http://blog.csdn.net/Sway_2012/article/details/23381135
相关文章推荐
- CentOS 6.5 IP 设置
- 全陷阱破解:在Linux环境下的Jenkins中持续集成Android工程
- 每天一个linux命令(13):less 命令
- 请使劲回答一个关于UNIX/Linux自动扩展stack的问题
- 请使劲回答一个关于UNIX/Linux自动扩展stack的问题
- 每天一个linux命令(14):head 命令
- PhotoShop基本工具 -- 移动工具
- 每天一个linux命令(15):tail 命令
- gcc参数详解
- Linux以及Mac中top命令中的排序
- 每天一个linux命令(10):cat 命令
- Apache Directory Studio 简介信息
- centos 零碎学习小记 14.
- linux 内核新手入门
- Linux中的盘符问题
- 浅谈Tomcat性能优化---APR篇
- Korn Shell(简称ksh)
- C-Shelll(简称csh)
- Bourne Shell(简称sh)
- Bourne Again Shell (简称bash)