使用Boost Serialization库序列化CvKNearest类

时间:2012-06-26 23:20:27

标签: c++ boost opencv boost-serialization

有没有一种简单的方法可以使用C ++ API在OpenCV中保存KNN分类器?

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

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

我的包装类如下:

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

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

    }
}

我听说Boost Serialization库更健壮,更安全。任何人都可以向我指出适当的资源,我可以用Boost库完成这项工作吗?

1 个答案:

答案 0 :(得分:0)

@tisch完全正确,我想纠正自己。 CvKNearest不会覆盖loadsaveCVStatModel函数。

但由于CvKNearest不计算模型,因此不存储内部状态。当然,您希望存储培训并测试您已通过的cv::Mat数据。您可以使用FileStorage类,在下面给出了很好的描述和教程:

如果你想提供与OpenCV中其他统计模型相同的API(这是有道理的)我想继承CvKNearest并提供一个保存和加载功能,它们分别序列化训练/测试数据并使用FileStorage进行反序列化。