35 #ifndef CALIBRATION_YAML_HH
36 #define CALIBRATION_YAML_HH
45 std::ostream&
writeMatrix (std::ostream& stream, std::string
const& name, uint32_t rows, uint32_t columns, T
const* data)
47 stream << name <<
": !!opencv-matrix\n";
48 stream <<
" rows: " << rows <<
"\n";
49 stream <<
" cols: " << columns <<
"\n";
51 stream <<
" data: [ ";
53 stream.precision (17);
54 stream << std::scientific;
55 for (uint32_t i = 0; i < rows; i++) {
60 for (uint32_t j = 0; j < columns; j++) {
64 stream << std::setw(22) << data[i * columns + j];
82 std::string
const&
value ()
const
92 for (std::string::const_iterator iter = expect.
value ().begin (); iter != expect.
value ().end (); ++iter)
99 if (stream.get () != *iter)
101 stream.clear (std::ios_base::failbit);
110 std::istream&
operator >> (std::istream& stream, std::vector<T>& data)
113 while (stream.good ())
123 stream.putback (input);
127 data.push_back (value);
136 else if (input !=
',')
138 stream.clear (std::ios_base::failbit);
146 std::istream&
parseYaml (std::istream& stream, std::map<std::string, std::vector<float> >& data)
149 while (stream.good ())
153 if (input ==
'%' || input ==
'-')
156 std::getline (stream, comment);
159 stream.putback (input);
167 if (name[name.size () - 1] !=
':')
169 stream.clear (std::ios_base::failbit);
172 name.resize (name.size () - 1);
174 std::vector<float> arrayContents;
175 arrayContents.clear ();
181 stream >> arrayContents;
185 stream.putback (input);
188 uint32_t columns = 0;
189 stream >>
Expect (
"!!opencv-matrix");
190 stream >>
Expect (
"rows:") >> rows;
191 stream >>
Expect (
"cols:") >> columns;
192 stream >>
Expect (
"dt: d");
193 stream >>
Expect (
"data: [") >> arrayContents;
198 data.insert (std::make_pair(name, arrayContents));
202 fprintf (stderr,
"Error parsing data near array \"%s\"", name.c_str());
209 #endif //CALIBRATION_YAML_HH