C++ 如何使用boostxml归档序列化OpenCV Mat

C++ 如何使用boostxml归档序列化OpenCV Mat,c++,opencv,serialization,boost,C++,Opencv,Serialization,Boost,我正在尝试序列化一个对象,该对象的成员为cv::Mat,我发现了这一点,但当我尝试时,出现以下错误: usr/include/boost/archive/basic\u xml\u iarchive.hpp:70:9:错误:否 用于调用的匹配函数 '断言_失败(mpl_u::失败************ boost::serialization::is_包装器::***********) 注意:模板int mpl::断言失败(类型名称mpl::断言::类型) /usr/include/boost

我正在尝试序列化一个对象,该对象的成员为cv::Mat,我发现了这一点,但当我尝试时,出现以下错误:

usr/include/boost/archive/basic\u xml\u iarchive.hpp:70:9:错误:否 用于调用的匹配函数 '断言_失败(mpl_u::失败************ boost::serialization::is_包装器::***********) 注意:模板int mpl::断言失败(类型名称mpl::断言::类型) /usr/include/boost/archive/basic_xml_iarchive.hpp:在成员函数“void boost::archive::basic_xml_iarchive::load_override(T&,int)[使用T=unsigned char,archive=boost::archive::xml_iarchive]:'


在链接页面上的示例中,他们使用的是二进制存档,而我使用的是xml存档,这会导致问题吗?

需要将此添加到包含的标题中的某个位置:

namespace boost {
  namespace serialization {


    template<class Archive>
    inline void serialize(Archive & ar, cv::Mat& m, const unsigned int version) {
      int cols = m.cols;
      int rows = m.rows;
      size_t elemSize = m.elemSize();
      size_t elemType = m.type();

      ar & BOOST_SERIALIZATION_NVP(cols);
      ar & BOOST_SERIALIZATION_NVP(rows);
      ar & BOOST_SERIALIZATION_NVP(elemSize);
      ar & BOOST_SERIALIZATION_NVP(elemType); // element type.

      if(m.type() != elemType || m.rows != rows || m.cols != cols) {
        m = cv::Mat(rows, cols, elemType, cv::Scalar(0));
      }

      size_t dataSize = cols * rows * elemSize;
      cout << " datasize is " << dataSize;


      for (size_t dc = 0; dc < dataSize; dc++) {
        std::stringstream ss;
        ss << "elem_"<<dc;
        ar & boost::serialization::make_nvp(ss.str().c_str(), m.data[dc]);
      }

    }
  }
}
namespace boost{
命名空间序列化{
模板
内联void序列化(存档&ar,cv::Mat&m,常量unsigned int版本){
int cols=m.cols;
int行=m行;
size_t elemSize=m.elemSize();
size_t elemType=m.type();
ar&BOOST\U系列化\U NVP(cols);
ar和BOOST_序列化_NVP(行);
ar&BOOST_序列化_NVP(电子化);
ar&BOOST_序列化_NVP(elemType);//元素类型。
if(m.type()!=elemType | | m.rows!=rows | | m.cols!=cols){
m=cv::Mat(行、列、元素类型、cv::标量(0));
}
大小\u t数据大小=列*行*elemSize;

cout需要在包含的标题中的某个位置添加以下内容:

namespace boost {
  namespace serialization {


    template<class Archive>
    inline void serialize(Archive & ar, cv::Mat& m, const unsigned int version) {
      int cols = m.cols;
      int rows = m.rows;
      size_t elemSize = m.elemSize();
      size_t elemType = m.type();

      ar & BOOST_SERIALIZATION_NVP(cols);
      ar & BOOST_SERIALIZATION_NVP(rows);
      ar & BOOST_SERIALIZATION_NVP(elemSize);
      ar & BOOST_SERIALIZATION_NVP(elemType); // element type.

      if(m.type() != elemType || m.rows != rows || m.cols != cols) {
        m = cv::Mat(rows, cols, elemType, cv::Scalar(0));
      }

      size_t dataSize = cols * rows * elemSize;
      cout << " datasize is " << dataSize;


      for (size_t dc = 0; dc < dataSize; dc++) {
        std::stringstream ss;
        ss << "elem_"<<dc;
        ar & boost::serialization::make_nvp(ss.str().c_str(), m.data[dc]);
      }

    }
  }
}
namespace boost{
命名空间序列化{
模板
内联void序列化(存档&ar,cv::Mat&m,常量unsigned int版本){
int cols=m.cols;
int行=m行;
size_t elemSize=m.elemSize();
size_t elemType=m.type();
ar&BOOST\U系列化\U NVP(cols);
ar和BOOST_序列化_NVP(行);
ar&BOOST_序列化_NVP(电子化);
ar&BOOST_序列化_NVP(elemType);//元素类型。
if(m.type()!=elemType | | m.rows!=rows | | m.cols!=cols){
m=cv::Mat(行、列、元素类型、cv::标量(0));
}
大小\u t数据大小=列*行*elemSize;
库特