• OpenCV之XML和YAML文件读写


    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 << "发生错误!字符串不是一个序列!" << '
    ';
      return 1;
    }
    FileNodeIterator it = n.begin(), it_end = n.end();  //遍历节点
    for (; it != it_end; ++it)) {
      std::cout << (string)*it << '
    ';
    }
    

    文件关闭

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

    fs.release();
    
  • 相关阅读:
    P4718 [模板]Pollard-Rho算法
    python爬虫模板
    Codeforces1248F. Catowice City
    P3980 [NOI2008]志愿者招募 (费用流)
    P2805 [NOI2009]植物大战僵尸 (拓扑排序 + 最小割)
    P3157 [CQOI2011]动态逆序对
    P2634 [国家集训队]聪聪可可 (点分治)
    HDU6703 array (线段树)
    Codeforces750E. New Year and Old Subsequence (线段树维护DP)
    Codeforces301D. Yaroslav and Divisors
  • 原文地址:https://www.cnblogs.com/ishero/p/11136333.html
Copyright © 2020-2023  润新知