2013-04-20 58 views
1

我试图序列具有CV对象::垫的一员,我发现这个SO page但是当我尝试它,我得到以下错误:如何序列化的OpenCV垫与升压XML归档

usr/include/boost/archive/basic_xml_iarchive.hpp:70:9: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::serialization::is_wrapper::************) note: template int mpl_::assertion_failed(typename mpl_::assert::type) /usr/include/boost/archive/basic_xml_iarchive.hpp: In member function ‘void boost::archive::basic_xml_iarchive::load_override(T&, int) [with T = unsigned char, Archive = boost::archive::xml_iarchive]’:’

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

回答

3

需要在包括头添加这个地方:

mamespace 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]); 
     } 

    } 
    } 
}