FileStorage类
构造函数
operator <<
FileStorage::open
FileStorage::isOpened
FileStorage::release
FileStorage类将各种OpenCV数据结构的数据存储为XML 或 YML格式。
构造函数
FileStorage类的构造函数为:
cv::FileStorage(const string& source, int flags, const string& encoding=string());
参数说明:
source –存储或读取数据的文件名(字符串),其扩展名(.xml 或 .yml或者.yaml)决定文件格式。
flags – 操作方式,包括:
FileStorage::READ 打开文件进行读操作
FileStorage::WRITE 打开文件进行写操作
FileStorage::APPEND打开文件进行附加操作,在已有内容的文件里添加
encoding:编码方式,用默认值就好。
下面为写操作的例子(注意<<箭头指向):
#include<iostream>
#include<opencv2/highgui.hpp>
#include<opencv2/core/core.hpp>
using namespace cv;
using namespace std;
int main(int argc,char**argv)
{
FileStorage fs("1.yml",FileStorage::WRITE);
int num1,num2;
num1=3,num2=4;
fs<<"num1"<<num1;
fs<<"num2"<<num2;
Mat A(4,5,CV_32FC1,Scalar(10));
fs["A"]<<A;
fs.release();
}
下面为读操作的例子(注意>>箭头指向):
#include<iostream>
#include<opencv2/highgui.hpp>
#include<opencv2/core/core.hpp>
using namespace cv;
using namespace std;
int main(int argc,char**argv)
{
FileStorage fs("1.yml",FileStorage::READ);
int num1,num2;
fs["num1"]>>num1;//读num1 其中["num1"]为1.yml内标识作用
fs["num2"]>>num2;
Mat A(4,5,CV_32FC1);
fs["A"]>>A;
fs.release();
}
下面为附加操作的例子(注意>>箭头指向):
#include<iostream>
#include<opencv2/highgui.hpp>
#include<opencv2/core/core.hpp>
using namespace cv;
using namespace std;
int main(int argc,char**argv)
{
FileStorage fs("1.yml",FileStorage::APPEND);//只需将写操作的WRITE改成APPEND
int num1,num2;
num3=30,num4=10;
fs<<"num3"<<num1;
fs<<"num4"<<num2;
Mat B(4,5,CV_32FC1,Scalar(0));
fs["A"]<<A;
fs.release();
}
FileStorage::open():函数用于打开相关文件
boolFileStorage::open(const string& filename, int flags, const string&encoding=string())
FileStorage::isOpened ():用于检测文件是否打开。
一般如下有操作:
cv::FileStorage fs;
fs.open("1.yml",FileStorage::WRITE);//打开1.yml文件并对其进行写操作
if(!fs.isOpened())//判别打开与否
{
cout<<""<<endl;
return 0;
}
//....一系列操作
fs.release();
当然也可以对打开的文件进行其他操作,改变一下flags即可。