Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
26bd6b3f
Commit
26bd6b3f
authored
Jul 27, 2011
by
Bernat Gabor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added the File Input and Output using XML and YAML files tutorial.
parent
f7ff65f5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
134 additions
and
102 deletions
+134
-102
conf.py
doc/conf.py
+1
-0
file_input_output_with_xml_yml.rst
...ut_output_with_xml_yml/file_input_output_with_xml_yml.rst
+0
-0
file_input_output_with_xml_yml.png
...of_content_core/images/file_input_output_with_xml_yml.png
+0
-0
table_of_content_core.rst
...ials/core/table_of_content_core/table_of_content_core.rst
+24
-4
file_input_output.cpp
...utorial_code/core/file_input_output/file_input_output.cpp
+109
-98
No files found.
doc/conf.py
View file @
26bd6b3f
...
...
@@ -354,6 +354,7 @@ extlinks = {'cvt_color': ('http://opencv.willowgarage.com/documentation/cpp/imgp
'utilitysystemfunctions'
:(
'http://opencv.itseez.com/modules/core/doc/utility_and_system_functions_and_macros.html#
%
s'
,
None
),
'imgprocfilter'
:(
'http://opencv.itseez.com/modules/imgproc/doc/filtering.html#
%
s'
,
None
),
'svms'
:(
'http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#
%
s'
,
None
),
'xmlymlpers'
:(
'http://opencv.itseez.com/modules/core/doc/xml_yaml_persistence.html#
%
s'
,
None
),
'point_polygon_test'
:
(
'http://opencv.willowgarage.com/documentation/cpp/imgproc_structural_analysis_and_shape_descriptors.html#cv-pointpolygontest
%
s'
,
None
)
}
...
...
doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.rst
0 → 100644
View file @
26bd6b3f
This diff is collapsed.
Click to expand it.
doc/tutorials/core/table_of_content_core/images/file_input_output_with_xml_yml.png
0 → 100644
View file @
26bd6b3f
5.39 KB
doc/tutorials/core/table_of_content_core/table_of_content_core.rst
View file @
26bd6b3f
...
...
@@ -110,7 +110,7 @@ Here you will learn the about the basic building blocks of the library. A must r
.. cssclass:: toctableopencv
=============== ======================================================
|Beginners_7| **Title:**
*
:ref:`Drawing_2`
|Beginners_7| **Title:** :ref:`Drawing_2`
*Compatibility:* > OpenCV 2.0
...
...
@@ -129,7 +129,7 @@ Here you will learn the about the basic building blocks of the library. A must r
.. cssclass:: toctableopencv
=============== ======================================================
|DiscFourTr| **Title:**
*
:ref:`discretFourierTransform`
|DiscFourTr| **Title:** :ref:`discretFourierTransform`
*Compatibility:* > OpenCV 2.0
...
...
@@ -143,6 +143,25 @@ Here you will learn the about the basic building blocks of the library. A must r
:height: 90pt
:width: 90pt
+
.. tabularcolumns:: m{100pt} m{300pt}
.. cssclass:: toctableopencv
=============== ======================================================
|FileIOXMLYAML| **Title:** :ref:`fileInputOutputXMLYAML`
*Compatibility:* > OpenCV 2.0
*Author:* |Author_BernatG|
You will see how to use the :xmlymlpers:`FileStorage <filestorage>` data structure of OpenCV to write and read data to XML or YAML file format.
=============== ======================================================
.. |FileIOXMLYAML| image:: images/file_input_output_with_xml_yml.png
:height: 90pt
:width: 90pt
.. raw:: latex
\pagebreak
...
...
@@ -157,4 +176,5 @@ Here you will learn the about the basic building blocks of the library. A must r
../basic_geometric_drawing/basic_geometric_drawing
../random_generator_and_text/random_generator_and_text
../mat-mask-operations/mat-mask-operations
../discrete_fourier_transform/discrete_fourier_transform
\ No newline at end of file
../discrete_fourier_transform/discrete_fourier_transform
../file_input_output_with_xml_yml/file_input_output_with_xml_yml
\ No newline at end of file
samples/cpp/tutorial_code/core/file_input_output/file_input_output.cpp
View file @
26bd6b3f
#include
"opencv2/core/core.hpp"
#include
<opencv2/core/core.hpp>
#include <iostream>
#include <string>
using
namespace
std
;
using
namespace
cv
;
using
namespace
std
;
void
help
(
char
**
av
)
{
cout
<<
endl
<<
av
[
0
]
<<
" shows the usage of the OpenCV serialization functionality."
<<
endl
<<
"usage: "
<<
endl
<<
av
[
0
]
<<
" outputfile.yml.gz"
<<
endl
<<
"The output file may be either XML (xml) or YAML (yml/yaml). 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
;
cout
<<
endl
<<
av
[
0
]
<<
" shows the usage of the OpenCV serialization functionality."
<<
endl
<<
"usage: "
<<
endl
<<
av
[
0
]
<<
" outputfile.yml.gz"
<<
endl
<<
"The output file may be either XML (xml) or YAML (yml/yaml). 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
;
}
class
MyData
{
public
:
MyData
()
:
A
(
0
),
X
(
0
),
id
()
{}
explicit
MyData
(
int
)
:
A
(
97
),
X
(
CV_PI
),
id
(
"mydata1234"
)
// explicit to avoid implicit conversion
{}
void
write
(
FileStorage
&
fs
)
const
//Write serialization for this class
{
fs
<<
"{"
<<
"A"
<<
A
<<
"X"
<<
X
<<
"id"
<<
id
<<
"}"
;
}
void
read
(
const
FileNode
&
node
)
//Read serialization for this class
{
A
=
(
int
)
node
[
"A"
];
X
=
(
double
)
node
[
"X"
];
id
=
(
string
)
node
[
"id"
];
}
MyData
()
:
A
(
0
),
X
(
0
),
id
()
{}
explicit
MyData
(
int
)
:
A
(
97
),
X
(
CV_PI
),
id
(
"mydata1234"
)
// explicit to avoid implicit conversion
{}
void
write
(
FileStorage
&
fs
)
const
//Write serialization for this class
{
fs
<<
"{"
<<
"A"
<<
A
<<
"X"
<<
X
<<
"id"
<<
id
<<
"}"
;
}
void
read
(
const
FileNode
&
node
)
//Read serialization for this class
{
A
=
(
int
)
node
[
"A"
];
X
=
(
double
)
node
[
"X"
];
id
=
(
string
)
node
[
"id"
];
}
public
:
// Data Members
int
A
;
double
X
;
...
...
@@ -45,13 +44,13 @@ public: // Data Members
//These write and read functions must be defined for the serialization in FileStorage to work
void
write
(
FileStorage
&
fs
,
const
std
::
string
&
,
const
MyData
&
x
)
{
x
.
write
(
fs
);
x
.
write
(
fs
);
}
void
read
(
const
FileNode
&
node
,
MyData
&
x
,
const
MyData
&
default_value
=
MyData
()){
if
(
node
.
empty
())
x
=
default_value
;
else
x
.
read
(
node
);
if
(
node
.
empty
())
x
=
default_value
;
else
x
.
read
(
node
);
}
// This function will print our custom class to the console
...
...
@@ -65,80 +64,91 @@ ostream& operator<<(ostream& out, const MyData& m)
int
main
(
int
ac
,
char
**
av
)
{
if
(
ac
!=
2
)
{
help
(
av
);
return
1
;
}
string
filename
=
av
[
1
];
//write
{
Mat
R
=
Mat_
<
double
>::
eye
(
3
,
3
),
T
=
Mat_
<
double
>::
zeros
(
3
,
1
);
MyData
m
(
1
);
FileStorage
fs
(
filename
,
FileStorage
::
WRITE
);
fs
<<
"strings"
<<
"["
;
fs
<<
"image1.jpg"
<<
"Awesomeness"
<<
"baboon.jpg"
;
fs
<<
"]"
;
fs
<<
"R"
<<
R
;
fs
<<
"T"
<<
T
;
fs
<<
"MyData"
<<
m
;
cout
<<
"Write Done."
<<
endl
;
}
//read
{
cout
<<
endl
<<
"Reading: "
<<
endl
;
FileStorage
fs
(
filename
,
FileStorage
::
READ
);
if
(
!
fs
.
isOpened
())
if
(
ac
!=
2
)
{
cerr
<<
"Failed to open "
<<
filename
<<
endl
;
help
(
av
);
return
1
;
help
(
av
);
return
1
;
}
FileNode
n
=
fs
[
"strings"
];
if
(
n
.
type
()
!=
FileNode
::
SEQ
)
{
cerr
<<
"strings is not a sequence! FAIL"
<<
endl
;
return
1
;
}
string
filename
=
av
[
1
];
{
//write
Mat
R
=
Mat_
<
uchar
>::
eye
(
3
,
3
),
T
=
Mat_
<
double
>::
zeros
(
3
,
1
);
MyData
m
(
1
);
FileNodeIterator
it
=
n
.
begin
(),
it_end
=
n
.
end
();
for
(;
it
!=
it_end
;
++
it
)
cout
<<
(
string
)
*
it
<<
endl
;
FileStorage
fs
(
filename
,
FileStorage
::
WRITE
);
MyData
m
;
Mat
R
,
T
;
fs
<<
"iterationNr"
<<
100
;
fs
<<
"strings"
<<
"["
;
// text - string sequence
fs
<<
"image1.jpg"
<<
"Awesomeness"
<<
"baboon.jpg"
;
fs
<<
"]"
;
// close sequence
fs
<<
"Mapping"
;
// text - mapping
fs
<<
"{"
<<
"One"
<<
1
;
fs
<<
"Two"
<<
2
<<
"}"
;
fs
[
"R"
]
>>
R
;
fs
[
"T"
]
>>
T
;
fs
[
"MyData"
]
>>
m
;
fs
<<
"R"
<<
R
;
// cv::Mat
fs
<<
"T"
<<
T
;
cout
<<
endl
<<
"R = "
<<
R
<<
"
\n
"
;
cout
<<
"T = "
<<
T
<<
endl
<<
endl
;
cout
<<
"MyData = "
<<
endl
<<
m
<<
endl
<<
endl
;
fs
<<
"MyData"
<<
m
;
// your own data structures
//Show default behavior for non existing nodes
cout
<<
"Attempt to read NonExisting (should initialize the data structure with its default)."
;
fs
[
"NonExisting"
]
>>
m
;
cout
<<
endl
<<
"NonExisting = "
<<
endl
<<
m
<<
endl
;
}
fs
.
release
();
// explicit close
cout
<<
"Write Done."
<<
endl
;
}
cout
<<
endl
<<
"Tip: Open up "
<<
filename
<<
" with a text editor to see the serialized data."
<<
endl
;
{
//read
cout
<<
endl
<<
"Reading: "
<<
endl
;
FileStorage
fs
;
fs
.
open
(
filename
,
FileStorage
::
READ
);
int
itNr
;
//fs["iterationNr"] >> itNr;
itNr
=
(
int
)
fs
[
"iterationNr"
];
cout
<<
itNr
;
if
(
!
fs
.
isOpened
())
{
cerr
<<
"Failed to open "
<<
filename
<<
endl
;
help
(
av
);
return
1
;
}
FileNode
n
=
fs
[
"strings"
];
// Read string sequence - Get node
if
(
n
.
type
()
!=
FileNode
::
SEQ
)
{
cerr
<<
"strings is not a sequence! FAIL"
<<
endl
;
return
1
;
}
FileNodeIterator
it
=
n
.
begin
(),
it_end
=
n
.
end
();
// Go through the node
for
(;
it
!=
it_end
;
++
it
)
cout
<<
(
string
)
*
it
<<
endl
;
n
=
fs
[
"Mapping"
];
// Read mappings from a sequence
cout
<<
"Two "
<<
(
int
)(
n
[
"Two"
])
<<
"; "
;
cout
<<
"One "
<<
(
int
)(
n
[
"One"
])
<<
endl
<<
endl
;
MyData
m
;
Mat
R
,
T
;
fs
[
"R"
]
>>
R
;
// Read cv::Mat
fs
[
"T"
]
>>
T
;
fs
[
"MyData"
]
>>
m
;
// Read your own structure_
cout
<<
endl
<<
"R = "
<<
R
<<
endl
;
cout
<<
"T = "
<<
T
<<
endl
<<
endl
;
cout
<<
"MyData = "
<<
endl
<<
m
<<
endl
<<
endl
;
//Show default behavior for non existing nodes
cout
<<
"Attempt to read NonExisting (should initialize the data structure with its default)."
;
fs
[
"NonExisting"
]
>>
m
;
cout
<<
endl
<<
"NonExisting = "
<<
endl
<<
m
<<
endl
;
}
return
0
;
}
cout
<<
endl
<<
"Tip: Open up "
<<
filename
<<
" with a text editor to see the serialized data."
<<
endl
;
return
0
;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment