序列化图片类

#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;

}

猜你喜欢

转载自blog.csdn.net/qq_33628827/article/details/83218657
今日推荐