opencv- FileStorage数据的读取与保存

支持读写XML, YAML, JSON 格式文件,后缀名为.xml , .yml , .yaml , .json

保存数据

    //cv::FileStorage(const string& source, int flags, const string& encoding=string());
    //创建方式一
    //cv::FileStorage fs("D:\bb\tt.yml", cv::FileStorage::WRITE);//创建FileStorage实例
    /*
    参数1:存储或读取数据的文件名(字符串)
    参数2:操作模式,包括:
            FileStorage::READ 打开文件进行读操作
            FileStorage::WRITE 打开文件进行写操作
            FileStorage::APPEND打开文件进行附加操作
            FileStorage::MEMORY 从source读数据,或向内部缓存写入数据(由FileStorage::release返回)
    参数3:encoding – 文件编码方式。目前不支持UTF-16 XML 编码,应使用 8-bit 编码

    */

    //创建方式二
    cv::FileStorage fs;
    fs.open("D:\bb\tt.yml", cv::FileStorage::WRITE);

    

    //保存数值
    int imageWidth = 5;
    int imageHeight = 10;
    fs << "imageWidth" << imageWidth;
    fs << "imageHeight" << imageHeight;

    //保存矩阵
    cv::Mat m1 = cv::Mat::eye(3, 3, CV_8U);
    fs << "m1" << m1;

    bool b = fs.isOpened(); //文件是否打开
    //ture – 如果对象关联了当前文件;false – 其他情况
    std::cerr << b << std::endl;

    fs.release();

读取数据 

    cv::FileStorage fs;
    fs.open("D:\bb\tt.yml", cv::FileStorage::READ);
    
    //读取普通数据
    int width;
    int height;
    fs["imageWidth"] >> width;//读取映射名为imageWidth的数据赋值给width
    fs["imageHeight"] >> height;
    std::cout << "width readed = " << width << std::endl;
    std::cout << "height readed = " << height << std::endl;

    //读取矩阵
    cv::Mat resultMatRead;
    fs["m1"] >> resultMatRead;//读取映射名为m1的矩阵赋值给resultMatRead  
    std::cerr << resultMatRead << std::endl;
    
    fs.release();

  

原文地址:https://www.cnblogs.com/liming19680104/p/15486681.html