1 | #include "file_storage.h"
|
2 |
|
3 | template<> void WriteVariable<cv::Mat>(std::ostream& out, const cv::Mat& mat) {
|
4 | WriteVariable(out, mat.rows);
|
5 | WriteVariable(out, mat.cols);
|
6 | WriteVariable(out, mat.type());
|
7 | const size_t rowBytes = mat.cols * mat.elemSize();
|
8 | for (int i = 0; i < mat.rows; i++)
|
9 | out.write(reinterpret_cast<const char*>(mat.ptr(i, 0)), rowBytes);
|
10 | }
|
11 |
|
12 | void ReadMatData(std::istream& in, cv::Mat& mat) {
|
13 | const size_t rowBytes = mat.cols * mat.elemSize();
|
14 | for (int i = 0; i < mat.rows; i++)
|
15 | in.read(reinterpret_cast<char*>(mat.ptr(i, 0)), rowBytes);
|
16 | }
|
17 |
|
18 | template<> void ReadVariable<cv::Mat>(std::istream& in, cv::Mat& mat) {
|
19 | int rows, cols, type;
|
20 | ReadVariable(in, rows);
|
21 | ReadVariable(in, cols);
|
22 | ReadVariable(in, type);
|
23 | mat.create(rows, cols, type);
|
24 | ReadMatData(in, mat);
|
25 | }
|
26 |
|
27 | template<> void ReadVariable<CvMat*>(std::istream& in, CvMat*& mat) {
|
28 | int rows, cols, type;
|
29 | ReadVariable(in, rows);
|
30 | ReadVariable(in, cols);
|
31 | ReadVariable(in, type);
|
32 | mat = cvCreateMat(rows, cols, type);
|
33 | cv::Mat wrapper = mat;
|
34 | ReadMatData(in, wrapper);
|
35 | }
|
36 |
|
37 | template<> void WriteVariable<cv::PCA>(std::ostream& out, const cv::PCA& pca) {
|
38 | WriteVariable(out, pca.mean);
|
39 | WriteVariable(out, pca.eigenvalues);
|
40 | WriteVariable(out, pca.eigenvectors);
|
41 | }
|
42 |
|
43 | template<> void ReadVariable<cv::PCA>(std::istream& in, cv::PCA& pca) {
|
44 | ReadVariable(in, pca.mean);
|
45 | ReadVariable(in, pca.eigenvalues);
|
46 | ReadVariable(in, pca.eigenvectors);
|
47 | }
|