#include <iostream>
#include <string>
static void help(char** av)
{
cout << endl
<< av[0] << " shows the usage of the OpenCV serialization functionality." << endl << endl
<< "usage: " << endl
<< av[0] << " [output file name] (default outputfile.yml.gz)" << endl << endl
<< "The output file may be XML (xml), YAML (yml/yaml), or JSON (json)." << endl
<< "You can even compress it by specifying this in its extension like xml.gz yaml.gz etc... " << endl
<< "With FileStorage you can serialize objects in OpenCV by using the << and >> operators" << endl
<< "For example: - create a class and have it serialized" << endl
<< " - use it to read and write matrices." << endl << endl;
}
class MyData
{
public:
MyData() : A(0), X(0), id()
{}
explicit MyData(
int) : A(97), X(
CV_PI), id(
"mydata1234")
{}
{
fs << "{" << "A" << A << "X" << X << "id" << id << "}";
}
{
A = (int)node["A"];
X = (double)node["X"];
id = (string)node["id"];
}
public:
int A;
double X;
string id;
};
{
x.write(fs);
}
static void read(
const FileNode& node, MyData& x,
const MyData& default_value = MyData()){
x = default_value;
else
x.read(node);
}
static ostream&
operator<<(ostream& out,
const MyData& m)
{
out << "{ id = " << m.id << ", ";
out << "X = " << m.X << ", ";
out << "A = " << m.A << "}";
return out;
}
int main(
int ac,
char** av)
{
string filename;
if (ac != 2)
{
help(av);
filename = "outputfile.yml.gz";
}
else
filename = av[1];
{
MyData m(1);
fs << "iterationNr" << 100;
fs << "strings" << "[";
fs << "image1.jpg" << "Awesomeness" << "../data/baboon.jpg";
fs << "]";
fs << "Mapping";
fs << "{" << "One" << 1;
fs << "Two" << 2 << "}";
fs << "R" << R;
fs << "T" << T;
fs << "MyData" << m;
cout << "Write operation to file:" << filename << " completed successfully." << endl;
}
{
cout << endl << "Reading: " << endl;
fs.
open(filename, FileStorage::READ);
int itNr;
itNr = (int) fs["iterationNr"];
cout << itNr;
{
cerr << "Failed to open " << filename << endl;
help(av);
return 1;
}
if (n.
type() != FileNode::SEQ)
{
cerr << "strings is not a sequence! FAIL" << endl;
return 1;
}
for (; it != it_end; ++it)
cout << (string)*it << endl;
n = fs["Mapping"];
cout << "Two " << (int)(n["Two"]) << "; ";
cout << "One " << (int)(n["One"]) << endl << endl;
MyData m;
fs["R"] >> R;
fs["T"] >> T;
fs["MyData"] >> m;
cout << endl
<< "R = " << R << endl;
cout << "T = " << T << endl << endl;
cout << "MyData = " << endl << m << endl << endl;
cout << "Attempt to read NonExisting (should initialize the data structure with its default).";
fs["NonExisting"] >> m;
cout << endl << "NonExisting = " << endl << m << endl;
}
cout << endl
<< "Tip: Open up " << filename << " with a text editor to see the serialized data." << endl;
return 0;
}
used to iterate through sequences and mappings.
Definition persistence.hpp:595
File Storage Node class.
Definition persistence.hpp:441
FileNodeIterator begin() const
returns iterator pointing to the first node element
FileNodeIterator end() const
returns iterator pointing to the element following the last node element
bool empty() const
returns true if the node is empty
int type() const
Returns type of the node.
XML/YAML/JSON file storage class that encapsulates all the information necessary for writing or readi...
Definition persistence.hpp:261
virtual bool open(const String &filename, int flags, const String &encoding=String())
Opens a file.
virtual bool isOpened() const
Checks whether the file is opened.
virtual void release()
Closes the file and releases all the memory buffers.
Template matrix class derived from Mat.
Definition mat.hpp:2247
n-dimensional dense array class
Definition mat.hpp:829
std::ostream & operator<<(std::ostream &, const DualQuat< _Tp > &)
#define CV_PI
Definition cvdef.h:380
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
void write(FileStorage &fs, const String &name, int value)
void read(const FileNode &node, int &value, int default_value)