opencv下XML 文件的读写 很全滴

前端之家收集整理的这篇文章主要介绍了opencv下XML 文件的读写 很全滴前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. <spanstyle="font-family:Arial,sans-serif;font-size:12px;background-color:rgb(255,255);">Opencv存储和读取XML文件使用FileStorage类,对于不同的数据结构,存储和读取的方式不同,下面结合例子具体分析下。</span>

文件

    #include"opencv2/core/core.hpp"
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>

存储XML的代码结构

    FileStoragefs(“name.xml”,FileStorage::WRITE);//创建XML文件
  1. if(!fs.isOpened())
  2. {
  3. cerr<<"Failedtoopen"<<filename<<endl;
  4. }
  5. /******************************/
  6. /*存储数据*/
  7. fs.release();

一、一般数据的存储

1. int型数据(float,string,float 等数据类型相同)

    intnum;
  1. fs["Num"]<<num;

2. vector 数据

    vector<int>data;
  1. for(inti=0;i<5;i++)
  2. data.push_back(i);
  3. fs<<"VECTOR"<<"[";//注意要有中括号
  4. @H_403_218@for(vector<int>::iteratorit=data.begin();it!=data.begin();it++)
  5. {
  6. fs<<(*it);
  7. }
  8. fs<<"]";

3. Map 数据读取

    map<string, data.insert(map<string,int>::value_type("one",1));
  1. data.insert(map<string,87); font-weight:bold; background-color:inherit">int>::value_type("two",2));
  2. fs<<"MAP"<<"{";//注意要用到大括号
  3. @H_403_218@for
    (map<string,87); font-weight:bold; background-color:inherit">int>::iteratorit=data.begin();it!=data.end();it++)
  4. fs<<it->first<<it->second;
  5. fs<<"}";

4. Opencv 中矩阵数据的存储

    MatR=Mat_::eye(3,3);
  1. fs<<"Mat"<<R;

二、一般数据的读取


首先需要打开XML文件

    FileStoragefs("name.xml",FileStorage::READ);
  1. }

1. int型数据(float,float 等数据类型相同)
    intNum=fs["Num"];
  1. //or
  2. fs["Num"]>>Num;

2. vector 数据

    FileNoden=fs["VECOTR"]; @H_403_218@if(n.type()!=FileNode::SEQ)
  1. cerr<<"VECTORisnotasequence!FAIL"<<endl;
  2. for(FileNodeIteratorit=n.begin();it!=n.end();it++)
  3. cout<<*it<<endl;
  4. }

3. Map数据

    FileNoden=fs["MAP"];
  1. cout<<"one"<<(int)n["one"]<<endl;
  2. cout<<"two"<<(int)n["two"]<<endl;

    MatR=fs["MAT"];


三、自定义数据的存储与读取 1、首先需要先定义一个数据结构

    classMyData{ @H_403_218@public:
  1. MyaData()A(0){B.clear();}
  2. MyData(intk,Mat&m)
  3. A=k;
  4. B=m;
  5. inti=0;i<A;++)
  6. B.push_back(i);
  7. intA;
  8. vector<float>B;
  9. MatR;
  10. //定义存储函数,注意末尾处的const,缺少会出现错误
  11. voidwrite(FileStorage&fs)const
  12. fs<<"{";//必须要有大括号
  13. fs<<"A"<<A;//存储A
  14. fs<<"B"<<"[";//存储B
  15. float>::iteratorit=B.begin();it!=B.end();it++)
  16. fs<<"]";
  17. fs<<"R"<<R;//存储R
  18. fs<<"}";
  19. //定义读取函数的数据
  20. voidread(FileStorage&node)
  21. //读取A
  22. intA=node["A"];
  23. //读取B
  24. FileNoden=node["B"];
  25. @H_403_218@if(n.type()!=cv::FileNode::SEQ)
  26. cerr<<"Bisnotasequence!FAIL"<<endl;
  27. @H_403_218@for(cv::FileNodeIteratorit=n.begin();it!=n.end();it++)
  28. cout<<(int)(*it)<<endl;
  29. //读取R
  30. MatR=node["R"];
  31. };

2、定义完数据结构后需要重载两个函数

    staticvoidwrite(FileStorage&fs,conststd::string&,153); font-weight:bold; background-color:inherit">constMyData&x){
  1. x.write(fs);
  2. voidread(constFileNode&node,MyData&x,153); font-weight:bold; background-color:inherit">constMyData&default_value=MyData()){
  3. if(node.empty())
  4. x=default_value;
  5. else
  6. x.read(node);
  7. 3. 对自定义的数据惊醒存储和读取

    存储

      intnum=2;
    1. MatR=Mat_::eye(3,3);
    2. MyDatamydata(2,R);
    3. fs<<"MYDATA"<<mydata;

    读取

      MyData*mydata=newMyData();
    1. fs["MYDATA"]>>(*mydata);



    转自 :http://www.jb51.cc/article/p-ocxgfswt-hz.html

    猜你在找的XML相关文章