【问题标题】:Object Serialization in C++ for storing the OpenCV's SVM object [OpenCV 3.1.0]C++ 中的对象序列化,用于存储 OpenCV 的 SVM 对象 [OpenCV 3.1.0]
【发布时间】:2017-09-03 23:46:02
【问题描述】:

因此众所周知,由于 OpenCV 中的错误,当您在保存非线性内核 SVM 后尝试加载它时会出现错误。

请参阅此处了解更多信息: OpenCV 3.1.0: Save and load trained SVMs

人们已经加载了 SVM,但无法获得相同的结果(加载后分类器数据已损坏)。我尝试通过编写自己的 svmloader 函数来测试它。

Ptr<SVM> svmloader(const String& filepath)
{
    FileStorage fs;
    fs.open(filepath, FileStorage::READ);

    Ptr<SVM> svm = Algorithm::read<SVM>(fs.getFirstTopLevelNode());
    return svm;
}

这可行,但我现在可以确认我已经在加载前和加载后测试了模型,但加载后的结果似乎更糟。那是在你训练一个分类器并测试它之后,它会很好,但如果你保存它并再次加载它,它会变得很糟糕。

所以我想我想用C++的对象序列化来解决这个问题。如何将任意对象写入文件,然后从该文件中读取?

还有人可以确认上述错误是否已在 OpenCV 3.2.0 中修复,我无法在发行说明中找到任何内容

非常感谢大家的帮助

【问题讨论】:

    标签: c++ opencv svm file-storage object-serialization


    【解决方案1】:

    https://github.com/opencv/opencv/blob/master/modules/ml/src/svm.cpp#L1611

    你会发现每次调用 cv::ml::SVM::trainAuto 或 cv::ml::SVM::train() 时都会调用一个 clear()

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 2012-06-01
      • 2017-09-15
      • 1970-01-01
      • 2020-04-27
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多