当你看到这篇文章说明我们有近似的问题在困扰,分享一下学习心得;最近在学习opencv的SVM,我参照网上的教程,训练了数字图片,但是在svm.xml加载模板时总是报错,于是我在网上找了个昏天暗地,但是最后也是没找到,与是我就结合网上的一些说法,自己开始一顿乱操作,最后居然搞成了,很是高兴;我这里把结果给大家粘贴出来;
#include <opencv2/opencv.hpp>
#include <opencv2/ml/ml.hpp>
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <io.h>
using namespace std;
using namespace cv;
int main()
{
CvSVM svm;//实例化
string modlepath="svm.xml";//定义一个字符串
svm.load(modlepath.c_str());//这里用svm加载训练的模板。c_str()返回的是一个临时指针
Mat src;
src=imread("D:\\vspic\\501.png");
if (src.empty())
{
cout<<"not"<<endl;
return -1;
}
Mat temp;
temp=src.reshape(1,1);
temp.convertTo(temp,CV_32FC1);
int response=(int)svm.predict(temp);//开始预测
cout<<"机器学习训练结果检测:"<<response<<endl;
waitKey(0);
return 0;
}
有的博客写的是下面的这种形式,我也尝试了,但是代码总是显示一条红线,证明是错误的呗哈哈
Ptr<ml::SVM>svm = ml::SVM::load("svm.xml");//加载训练的svm
我感觉我用上边这个出错的原因是opencv
的版本不同的问题,应该是不同的版本有不同的加载方式
,这是我个人的总结经验,如果有问题可以随时交流Q:1049300594