1 | #ifndef FILE_STORAGE_H
|
2 | #define FILE_STORAGE_H
|
3 |
|
4 | #include <vector>
|
5 | #include <iostream>
|
6 | #include <opencv2/opencv.hpp>
|
7 |
|
8 | template<class T> inline void WriteVariable(std::ostream& out, const T& var) {
|
9 | out.write(reinterpret_cast<const char*>(&var), sizeof(T));
|
10 | }
|
11 |
|
12 | template<class T> inline void ReadVariable(std::istream& in, T& var) {
|
13 | in.read(reinterpret_cast<char*>(&var), sizeof(T));
|
14 | }
|
15 |
|
16 | template<class T> inline T ReadVariable(std::istream& in) {
|
17 | T val;
|
18 | in.read(reinterpret_cast<char*>(&val), sizeof(T));
|
19 | return val;
|
20 | }
|
21 |
|
22 | template<> void WriteVariable<cv::Mat>(std::ostream& out, const cv::Mat& mat);
|
23 | template<> void ReadVariable<cv::Mat>(std::istream& in, cv::Mat& mat);
|
24 | template<> void ReadVariable<CvMat*>(std::istream& in, CvMat*& mat);
|
25 | template<> void WriteVariable<cv::PCA>(std::ostream& out, const cv::PCA& pca);
|
26 | template<> void ReadVariable<cv::PCA>(std::istream& in, cv::PCA& pca);
|
27 |
|
28 |
|
29 | template<class T> void WriteVec(std::ostream& out, const std::vector<T>& vec) {
|
30 | WriteVariable(out, vec.size());
|
31 | for (size_t i = 0; i < vec.size(); i++)
|
32 | WriteVariable(out, vec[i]);
|
33 | }
|
34 |
|
35 |
|
36 | template<class T> void ReadVec(std::istream& in, std::vector<T>& vec) {
|
37 | size_t size;
|
38 | ReadVariable(in, size);
|
39 | vec.resize(size);
|
40 | for (size_t i = 0; i < size; i++) {
|
41 | T var;
|
42 | ReadVariable(in, var);
|
43 | vec[i] = var;
|
44 | }
|
45 | }
|
46 |
|
47 |
|
48 | template<typename _Tp, int cn>
|
49 | void WriteVec(std::ostream& out, const cv::Vec<_Tp, cn>& vec) {
|
50 | for (int i = 0; i < cn; ++i)
|
51 | WriteVariable(out, vec[i]);
|
52 | }
|
53 |
|
54 |
|
55 | template<typename _Tp, int cn>
|
56 | void ReadVec(std::istream& in, cv::Vec<_Tp, cn>& vec) {
|
57 | for (int i = 0; i < cn; ++i)
|
58 | ReadVariable(in, vec[i]);
|
59 | }
|
60 |
|
61 | #endif
|