#include <fstream>
// include headers that implement a archivein simple text format
#include<boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <Eigen/Dense>
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/vector.hpp>
using namespace std;
using namespace cv;
using namespace Eigen;
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)
{
int elem_size = m.elemSize();
int 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);
}
template <class Archive>
void load(Archive & ar, ::cv::Mat& m,const unsigned int version)
{
int cols, rows;
int 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);
}
}
}
void test()
{
Mat img = imread("/Users/suxianbin/Desktop/ImageToUse/yingjing.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;
cout<<"write finish"<<endl;
}
ofs.close();
Mat imgOut;
ifstream inf("matrices.bin",std::ios::binary);
{
boost::archive::binary_iarchive ia(inf);
ia >> imgOut;
cout<<"read finish"<<endl;
}
imshow("img",imgOut);
waitKey(0);
}
int main()
{
test();
return 0;
}