OpenCV 与 SVM
一、SVM概述
支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来分类及回归分析。同样地,在OpenCV中已经有相关的库函数CvSVM实现了。一如既往地,我们不详细介绍SVM的算法原理,只是简单地介绍OpenCV是如何调用SVM的。本文参考:http://blog.csdn.net/qq_15947787/article/details/51375349
如果想要详细了解SVM的算法原理及证明过程,推荐以下参考网址:http://www.dataguru.cn/thread-371987-1-1.html 和 http://blog.csdn.net/alvine008/article/details/9097105
二、 设置参数及初始化
//设置参数
CvSVMParams params;
params.svm_type = CvSVM::C_SVC; //n(n>2)的分类器,其中参数C是异常惩罚因子,可以进行不完全分类
//params.svm_type = CvSVM::NU_SVC; //n(n>2)类似不完全分类的分类器,参数nu(nu属于[0,1]),取代了C_SVC类型的异常惩罚因子C;
//params.svm_type = CvSVM::ONE_CLASS; //单分类器,用一个分界线对特征空间进行分割。
params.kernel_type = CvSVM::LINEAR; //线性核函数,此核函数在分类是速度最快,分类将在原始空间中完成;
//params.kernel_type = CvSVM::POLY; //多项式核
//params.kernel_type = CvSVM::RBF; //径向基核,对于大部分情况都是选择此类型
//params.kernel_type = CvSVM::SIGMOID; //sigmoid核函数
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6); //SVM迭代终止条件,CV_TERMCRIT_ITER为终止条件类型,100为最大迭代次数,1e-6为结果的准确率
//训练SVM
CvSVM SVM;
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);