gpt4 book ai didi

c++ - boost opencv类型的序列化

转载 作者:行者123 更新时间:2023-12-02 17:57:00 25 4
gpt4 key购买 nike

我有以下一个类的成员(v1和v2),我需要使用boost序列化序列化到文件,然后在稍后阶段读回。
第一个是开放cv类型Point3f的 vector 的 vector ,另一个是opencv Vec6f类型的 vector 的 vector ,如下所示。

#include this in the class header 
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

//private member variables
std::vector< std::vector<cv::Point3f> > v1;
std::vector< std::vector<cv::Vec6f> > v2;


// Allow serialization to access non-public data members.
friend class boost::serialization::access;

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & v1;
ar & v2;

}
我在头文件的顶部定义了此名称,以便它可以了解如何序列化point3f和Vec6f类型。这是正确的方法吗?我可以保存数据,但是当我重新读取所有数据时,它具有正确数量的 vector 数组,但是每个条目的值均为0。我在做什么错了?我认为这与序列化函数本身有关,但不确定。
namespace boost {
namespace serialization {

template<class Archive>
void serialize(Archive &ar, cv::Point3_<float> pt3, const unsigned int)
{
ar & pt3.x;
ar & pt3.y;
ar & pt3.z;
}

template<class Archive>
void serialize(Archive &ar, cv::Vec<float,6> vec6, const unsigned int)
{
ar & vec6[0];
ar & vec6[1];
ar & vec6[2];
ar & vec6[3];
ar & vec6[4];
ar & vec6[5];
}

}
}
我用这段代码写
std::ofstream ofs1("v1test.bin"); 
boost::archive::binary_oarchive oa1(ofs1);
oa1 << v1;
我用这段代码来阅读
std::ifstream ifs1("v1test.bin");
boost::archive::binary_iarchive ia1(ifs1);
std::vector< std::vector<cv::Point3f> > test;
ia1 >> test; // this contains the right structure but all values are 0
任何帮助或指出正确方向的人将不胜感激

最佳答案

我想通了-愚蠢的错误-传入变量时忘记添加对变量的引用-应该是这个

namespace boost {
namespace serialization {

template<class Archive>
void serialize(Archive &ar, cv::Point3_<float> &pt3, const unsigned int)
{
ar & pt3.x;
ar & pt3.y;
ar & pt3.z;
}

template<class Archive>
void serialize(Archive &ar, cv::Vec<float,6> &vec6, const unsigned int)
{
ar & vec6[0];
ar & vec6[1];
ar & vec6[2];
ar & vec6[3];
ar & vec6[4];
ar & vec6[5];
}

}
}

关于c++ - boost opencv类型的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64498658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com