cv::FileStorage

参考链接:https://blog.csdn.net/wonder233/article/details/52810458

                    https://blog.csdn.net/coma_6512/article/details/78232649

成员函数

operator <<
FileStorage::open
FileStorage::isOpened
FileStorage::release

FileStorage类将各种OpenCV数据结构的数据存储为XML 或 YML格式。


构造函数

cv::FileStorage(const string& source, int flags, const string& encoding=string());  

source –存储或读取数据的文件名(字符串),其扩展名(.xml 或 .yml或者.yaml)决定文件格式。

flags – 操作方式,包括:

FileStorage::READ 打开文件进行读操作
FileStorage::WRITE 打开文件进行写操作
FileStorage::APPEND打开文件进行附加操作,在已有内容的文件里添加
encoding—编码方式,用默认值就好。 

FileStorage类的使用流程如下:

(1)实例化一个FileStorage类对象

(2)使用流操作符<<进行文件写入,>>进行文件读取,类似C++中的文件操作

(3)使用FileStorage::release()函数析构掉类对象,并关闭文件

下面是写操作的例子:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
    FileStorage file_("1.yml", FileStorage::WRITE);
    int num1 = 1, num2 = 2;
    file_<<"num1"<<num1;
    file_<<"num2"<<num2;
    Mat A(4,5,CV_32FC1,Scalar(10));
    file_<<"A"<<A;
    file_.release();
}

输出1.yml文件内容为:

%YAML:1.0
---
num1: 1
num2: 2
A: !!opencv-matrix
   rows: 4
   cols: 5
   dt: f
   data: [ 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10., 10.,
       10., 10., 10., 10., 10., 10., 10., 10. ]

特别注意!

file_<<"num1"<<num1;

输入的是标签,这里如果写成file_<<"num1:"<<num1; 就会报错。

OpenCV Error: Bad argument (Key names may only contain alphanumeric characters [a-zA-Z0-9], '-', '_' and ' ') in icvYMLWrite

不要画蛇添足加个冒号。

下面是读操作的例子:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
    FileStorage fs_ ("1.yml", FileStorage::READ);
    int r1, r2;
    fs_["num1"]>>r1;
    fs_["num2"]>>r2;   
    Mat A(4,5,CV_32FC1);
    fs_["A"]>>A;
    cout<< "r1 :"<<r1<<endl;
    cout<< "r2 :"<<r2<<endl;
    cout<< "A :"<<"\n"<<A<<endl;
    fs_.release();
}

这里fs_["num1"]  方括号里面的内容就是 写操作时我们给数据添加的标签

输出:

r1 :1
r2 :2
A :
[10, 10, 10, 10, 10;
 10, 10, 10, 10, 10;
 10, 10, 10, 10, 10;
 10, 10, 10, 10, 10]

猜你喜欢

转载自blog.csdn.net/zhhp1001/article/details/84816328
CV