#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")
{}
void write(FileStorage& fs)
const
{
fs << "{" << "A" << A << "X" << X << "id" << id << "}";
}
void read(
const FileNode& node)
{
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;
int itNr;
itNr = (int) fs["iterationNr"];
cout << itNr;
{
cerr << "Failed to open " << filename << endl;
help(av);
return 1;
}
{
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.
@ SEQ
sequence
Definition persistence.hpp:452
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.
@ WRITE
value, open the file for writing
Definition persistence.hpp:267
@ READ
value, open the file for reading
Definition persistence.hpp:266
virtual bool isOpened() const
Checks whether the file is opened.
virtual void release()
Closes the file and releases all the memory buffers.
static CV_NODISCARD_STD MatExpr eye(int rows, int cols)
static CV_NODISCARD_STD MatExpr zeros(int rows, int cols)
overridden forms of Mat::zeros() etc. Data type is omitted, of course
n-dimensional dense array class
Definition mat.hpp:840
static String & operator<<(String &out, Ptr< Formatted > fmtd)
Definition core.hpp:3170
#define CV_PI
Definition cvdef.h:382
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)