有没有一种简单的方法可以使用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库完成这项工作吗?
答案 0 :(得分:0)
@tisch完全正确,我想纠正自己。 CvKNearest不会覆盖load的save和CVStatModel函数。
但由于CvKNearest不计算模型,因此不存储内部状态。当然,您希望存储培训并测试您已通过的cv::Mat
数据。您可以使用FileStorage类,在下面给出了很好的描述和教程:
如果你想提供与OpenCV中其他统计模型相同的API(这是有道理的)我想继承CvKNearest并提供一个保存和加载功能,它们分别序列化训练/测试数据并使用FileStorage进行反序列化。