0

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

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

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

我的包装类如下:

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

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

    }
}

我听说 Boost 序列化库更加健壮和安全。谁能指出我可以使用 Boost 库完成此任务的适当资源?

4

1 回答 1

0

@tisch 是完全正确的,我想纠正自己。CvKNearest不会覆盖CVStatModel加载保存功能

但由于CvKNearest不计算模型,因此没有内部状态可存储。当然,你要存储cv::Mat你通过的训练和测试数据。您可以为此使用FileStorage类,在以下位置给出了很好的描述和教程:

如果您想提供与 OpenCV 中其他统计模型相同的 API(这很有意义),我想将CvKNearest子类化并提供保存和加载功能,分别序列化训练/测试数据并使用FileStorage反序列化它.

于 2012-06-28T05:46:51.903 回答