2012-06-26 42 views
0

是否有一种简单的方法可以通过使用C++ API在OpenCV中保存KNN分类器?使用Boost序列化库序列化CvK最近的类

在将CvKNearest类包装到另一个类中之后,我试图保存一个描述为here的KNN分类器。

它成功地保存到磁盘,但是当我从中读出运行预测方法给我分段错误(核心转储)错误。

我的包装类如下:

class KNNWrapper 
{ 
    CvKNearest knn; 
    bool train(Mat& traindata, Mat& trainclasses) 
    { 

    } 
    void test(Mat& testdata, Mat& testclasses) 
    { 

    } 
} 

我听说升压串行化库是更强大和安全。任何人都可以指引我使用Boost库来完成这些工作吗?

+0

哪个操作系统? 32位,64位?哪个OpenCV版本?保存和加载OpenCV机器学习库不成问题。你的数据是否有完整的代码清单?这个包装并没有真正意义。 – bytefish

+0

我使用的是64位的Ubuntu OpenCV 2.3.1。我正在寻找保存并加载KNN分类器。我在这里有以下代码https://gist.github.com/3008331 – garak

回答

0

@tisch是完全正确的,我想纠正自己。 CvKNearest不会覆盖CVStatModelloadsave功能。

但由于CvKNearest不计算模型,因此不存储内部状态。当然,您想存储您已通过的培训并测试cv::Mat数据。

如果你想提供相同的API在OpenCV的其他统计模型(这使得:您可以使用FileStorage类此,一个伟大的说明和教程在给定感觉)我想继承CvKNearest并提供保存和加载功能,它们分别序列化训练/测试数据并使用FileStorage对其进行反序列化。

+0

CvKNearest没有从CvStatModel实现必要的功能。所以你的解决方案是不可能的。 – tisch