繁体   English   中英

C ++中的对象序列化,用于存储OpenCV的SVM对象[OpenCV 3.1.0]

[英]Object Serialization in C++ for storing the OpenCV's SVM object [OpenCV 3.1.0]

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

有关更多信息,请参见此处: OpenCV 3.1.0:保存和加载经过培训的SVM

人们已经加载了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中修复,但我无法在发布说明中找到任何内容

任何帮助都是非常感谢的人

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM