C++ 将CvSVM对象存储在硬盘中

C++ 将CvSVM对象存储在硬盘中,c++,opencv,svm,C++,Opencv,Svm,我已经为opencv中的人脸创建了一个SVM检测器。我想把训练和预测的过程分开。因此,我想找到一种方法来存储在我的硬盘CvSVM SVM对象中,以便随时访问它,而无需再次训练新模型。这样,我就可以通过从硬盘加载SVM对象来使用预测方法。这在MATLAB中是非常直接的,但是我如何才能在OpenCV C++中成功呢?p> 使用load和save函数加载和保存SVM模型会导致munmap_chunk():无效指针消息(检测到glibc)消息 CvSVM=detect.SVMtrain(“dbpath/

我已经为opencv中的人脸创建了一个SVM检测器。我想把训练和预测的过程分开。因此,我想找到一种方法来存储在我的硬盘CvSVM SVM对象中,以便随时访问它,而无需再次训练新模型。这样,我就可以通过从硬盘加载SVM对象来使用预测方法。这在MATLAB中是非常直接的,但是我如何才能在OpenCV C++中成功呢?p> 使用load和save函数加载和保存SVM模型会导致munmap_chunk():无效指针消息(检测到glibc)消息

CvSVM=detect.SVMtrain(“dbpath/”);
save(“svmTrain.xml”,0);

这也很简单。它是一个
CvStatModel
,因此它带有
save
load
方法

因此,保存和加载它可以像这个SVM.load(“…xml”)//这就是我的想法,是的。或者.yaml IIRC。当我在svmpredict计算后使用load时,我得到一个glibc检测到的mun_map_chunk()无效指针:我想假设你的意思是“加载后使用预测”-听起来像是OpenCV错误。当然,如果你试图用一个未初始化的模型进行预测,那当然是你这边的一个错误。我得到了期望的结果,我的意思是svmpredict工作了,我用cout看到了结果,但之后我得到了消息。
    CvSVM SVM =  detect.SVMtrain("dbpath/");
    SVM.save("svmTrain.xml", 0);

    cout <<"Detection system in progress progress...\n";
    string pathFile = databasePath+ imageFilename;
    vector<float> confidence;
    detections = detect.detection(pathFile);
    CvSVM SVM;
    SVM.load("svmTrain.xml",0);
    confidence =  detect.SVMpredict(detections.at(0), SVM);
    //cout << "confidence is: " << confidence.at(0) << endl;
vector<float> Detection::SVMpredict(Mat image, CvSVM SVM){


vector<float> res;

//Mat image = imread(fileName,0); //Read as a gray image
//cvtColor(sampleMat, sampleMat, CV_BGR2GRAY);
image = eigenfacesExtraction(image);
image.convertTo(image, CV_32FC1); // <-- Convert to CV_32F for matrix mult

float response = SVM.predict(image); res.push_back(response);
float val = SVM.predict(image,true); res.push_back(val);
cout << "svm result: "<< response <<" val: "<< val << endl;

return res;

}