因此,众所周知,由于 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 中修复,我无法在 RELEASENOTES 中找到任何内容
非常感谢任何帮助