序列化图片类

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

究极调参工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值