微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提升opencv类型的序列化

如何解决提升opencv类型的序列化

我有一个类(v1和v2)的以下成员,我需要使用boost序列化序列化到文件,然后在稍后阶段读回。

一个是开放cv类型Point3f的向量的向量,另一个是opencv Vec6f类型的向量的向量,如下所示。

#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类型。这是正确的方法吗?我可以保存数据,但是当我重新读取所有数据时,它具有正确数量的向量数组,但是每个条目的值均为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];
}

}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?