6

我使用了 OpenCV KNN 分类器,在训练之后我需要保存分类器以便能够在测试阶段使用。我发现这knn.save()在 OpenCV 中没有实现。应该怎么做?

4

3 回答 3

8

在 k-NN 中,因为没有训练,所以没有实现保存和写入。train 方法的作用是只存储所有样本。所以没有“模型”被推断出来,那么除了所有的样本之外什么都不能保存。

于 2012-10-30T07:15:06.517 回答
2

在opencv 3.0中,实现了knn->save("train.yml"),,,

虽然我无法让加载功能正常工作,但您可以使用 FIleStorage 轻松地从文件中读取模型,如上所述,在 knn 中,模型基本上就是特征,所以您总是只需将 Mat 特征存储到文件中,然后再加载。

于 2015-12-27T11:25:13.290 回答
1

太长的评论,所以我在这里发布。这不是一个完整的解决方案,所以任何知道该怎么做的人:请分享一个更好的答案

我看过但找不到任何直接的实现。但是,我发现这个人(他的博客上有很多好东西)想出了如何阅读这些经过训练的巨大分类器集,其中包括 K 最近邻。

您也许可以使用他的方法来实现 CvKNearest 的读写。

顺便说一句,如果我对 c++ 的理解是正确的,save并且read已经为您实现了,那么只有write并且read实际上需要实现。


例如CvBoost::save

(升压.cpp)CvBoost::save

--> (inner_functions.cpp)CvStatModel::save

--> (boost.cpp)CvBoost::write


以同样的方式,您需要添加此功能:

(最近的.cpp)CvBoost::write


抱歉,我找不到更具体的东西。我希望这有帮助。

于 2012-06-25T16:14:14.593 回答