//cvmat_serialization.h #include <boost/serialization/split_free.hpp> #include <boost/serialization/vector.hpp> using namespace cv; BOOST_SERIALIZATION_SPLIT_FREE(::cv::Mat) namespace boost { namespace serialization { /** Serialization support for cv::Mat */ template<class Archive> void save(Archive & ar, const ::cv::Mat& m, const unsigned int version) { size_t elem_size = m.elemSize(); size_t elem_type = m.type(); ar & m.cols; ar & m.rows; ar & elem_size; ar & elem_type; const size_t data_size = m.cols * m.rows * elem_size; ar & boost::serialization::make_array(m.ptr(), data_size); } /** Serialization support for cv::Mat */ template <class Archive> void load(Archive & ar, ::cv::Mat& m, const unsigned int version) { int cols, rows; size_t elem_size, elem_type; ar & cols; ar & rows; ar & elem_size; ar & elem_type; m.create(rows, cols, elem_type); size_t data_size = m.cols * m.rows * elem_size; ar & boost::serialization::make_array(m.ptr(), data_size); } } }
<pre name="code" class="cpp">//main.cpp #include <fstream> #include "cvmat_serialization.h" using namespace std; void test() { Mat img = imread("/home/xunw/x/img.jpg"); std::ofstream ofs("matrices.bin", std::ios::out | std::ios::binary); { // use scope to ensure archive goes out of scope before stream boost::archive::binary_oarchive oa(ofs); oa << img; } ofs.close(); Mat imgOut; ifstream inf("matrices.bin",std::ios::binary); { boost::archive::binary_iarchive ia(inf); ia >> imgOut; } imshow("img",imgOut); waitKey(0); } int main() { test(); }
原文:http://blog.csdn.net/yiranlun3/article/details/39234129