#include "file_storage.h" template<> void WriteVariable(std::ostream& out, const cv::Mat& mat) { WriteVariable(out, mat.rows); WriteVariable(out, mat.cols); WriteVariable(out, mat.type()); const size_t rowBytes = mat.cols * mat.elemSize(); for (int i = 0; i < mat.rows; i++) out.write(reinterpret_cast(mat.ptr(i, 0)), rowBytes); } void ReadMatData(std::istream& in, cv::Mat& mat) { const size_t rowBytes = mat.cols * mat.elemSize(); for (int i = 0; i < mat.rows; i++) in.read(reinterpret_cast(mat.ptr(i, 0)), rowBytes); } template<> void ReadVariable(std::istream& in, cv::Mat& mat) { int rows, cols, type; ReadVariable(in, rows); ReadVariable(in, cols); ReadVariable(in, type); mat.create(rows, cols, type); ReadMatData(in, mat); } template<> void ReadVariable(std::istream& in, CvMat*& mat) { int rows, cols, type; ReadVariable(in, rows); ReadVariable(in, cols); ReadVariable(in, type); mat = cvCreateMat(rows, cols, type); cv::Mat wrapper = mat; ReadMatData(in, wrapper); } template<> void WriteVariable(std::ostream& out, const cv::PCA& pca) { WriteVariable(out, pca.mean); WriteVariable(out, pca.eigenvalues); WriteVariable(out, pca.eigenvectors); } template<> void ReadVariable(std::istream& in, cv::PCA& pca) { ReadVariable(in, pca.mean); ReadVariable(in, pca.eigenvalues); ReadVariable(in, pca.eigenvectors); }