我使用了 OpenCV KNN 分类器,在训练之后我需要保存分类器以便能够在测试阶段使用。我发现这knn.save()
在 OpenCV 中没有实现。应该怎么做?
3 回答
在 k-NN 中,因为没有训练,所以没有实现保存和写入。train 方法的作用是只存储所有样本。所以没有“模型”被推断出来,那么除了所有的样本之外什么都不能保存。
在opencv 3.0中,实现了knn->save("train.yml"),,,
虽然我无法让加载功能正常工作,但您可以使用 FIleStorage 轻松地从文件中读取模型,如上所述,在 knn 中,模型基本上就是特征,所以您总是只需将 Mat 特征存储到文件中,然后再加载。
太长的评论,所以我在这里发布。这不是一个完整的解决方案,所以任何知道该怎么做的人:请分享一个更好的答案
我看过但找不到任何直接的实现。但是,我发现这个人(他的博客上有很多好东西)想出了如何阅读这些经过训练的巨大分类器集,其中包括 K 最近邻。
您也许可以使用他的方法来实现 CvKNearest 的读写。
顺便说一句,如果我对 c++ 的理解是正确的,save
并且read
已经为您实现了,那么只有write
并且read
实际上需要实现。
例如CvBoost::save
:
(升压.cpp)CvBoost::save
--> (inner_functions.cpp)CvStatModel::save
--> (boost.cpp)CvBoost::write
以同样的方式,您需要添加此功能:
(最近的.cpp)CvBoost::write
抱歉,我找不到更具体的东西。我希望这有帮助。