opencv中自定义数据结构读写yml

#include
#include
#include
using namespace std;
using namespace cv;
typedef struct node
{
double data;
int id;
}NODE;


void writenode(FileStorage &file,NODE &mynode)
{
file<<"{:"<<"data"< //由于是嵌套的结构所以是file<<"{:"<<键<<值<<"}",如果不是嵌套为file<<"{"<<键<<值<<"}"
}


int main()
{
NODE node1,node2,node3;
node1.data=0.5;
node1.id=1;


node2.data=0.3;
node2.id=1;


node3.data=0.1;
node3.id=2;


vector>my(3);
my[0].push_back(node1);
my[0].push_back(node2);
my[1].push_back(node3);



FileStorage file("my.yml",FileStorage::WRITE);
file<<"count"<<(int)my.size();   //在文件中记录一共有多少组数据
for(int i=0;i<(int)my.size();i++)
{
char name[20];
sprintf(name,"class%d",i);  //记录组名称
file< //写入映射、序列嵌套的数据时,以"{:"代替"{","[:" 代替 "["。
for(int j=0;j<(int)my[i].size();j++)
writenode(file,my[i][j]);  //将节点写入文件
file<<"]";

}
file.release();






//-----------------------读取文件测试-----------------
int rcount=0;
FileStorage fileread("my.yml",FileStorage::READ);
fileread["count"]>>rcount;   //先把组数量读取出来
cout< FileNode filenode;   //定义一个文件节点
for(int i=0;i {
char name[10];  //定义标签名
sprintf(name,"class%d",i);  //先读取组的标签
filenode=fileread[name];  //标签读取
for(FileNodeIterator it=filenode.begin();it!=filenode.end();it++) //使用文件节点迭代器对组内部遍历
{
cout<<(double)(*it)["data"]<<"\t"<<(double)(*it)["id"]< }

}


getchar();
return 0;
}

你可能感兴趣的:(opencv)