美文网首页
SVM分类器在OpenCV中的使用

SVM分类器在OpenCV中的使用

作者: 温素年 | 来源:发表于2018-04-03 23:22 被阅读0次

    支持向量机(SVM)是通常由超平面定义的区别式分类器。也就是说,给定标记的训练数据(监督式学习),SVM 算法输出一个能够分类新样本的超平面。其核心的思想是找到给出的最大极小距离(margin)的超平面去训练样本。

    我上机器学习课的时候学到过,了解一点,但是理解的不是很深入。这里偏向应用,所以公式之类的就不赘述了。直接看 OpenCV 的代码吧。

    找资料的过程发现我用的是 OpenCV 3.0 的版本,但是网上的资料大多是 2.0 的版本,就很伤……

    整个过程分为训练和利用训练好的模型进行分类这两个部分。

    训练模型

    训练模型的步骤及用到的主要函数如下:

    (1)设置训练数据

    在训练时,需要把训练数据存储为Mat类的float类型,示例代码如下:

    // training data
    int labels[4] = { 1, -1, -1, -1 };
    float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
    cv::Mat trainingDataMat(4, 2, CV_32FC1, trainingData);
    cv::Mat labelsMat(4, 1, CV_32SC1, labels);
    

    (2)设置 SVM 的参数

    在 OpenCV 2.0 版本中,SVM 的参数存储在 CvSVMParams 类中,然后使用 CvSVM 类进行训练。

    然而,在OpenCV 3.0 中,要直接对 SMV 设置参数。示例代码如下:

    // initial SVM
    cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
    svm->setType(cv::ml::SVM::Types::C_SVC);
    svm->setKernel(cv::ml::SVM::KernelTypes::LINEAR);
    svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6));
    

    (3)训练 SVM 分类器

    训练的过程就只有一句代码了:

    // train operation
    svm->train(trainingDataMat, cv::ml::SampleTypes::ROW_SAMPLE, labelsMat);
    

    (4)储存 SVM 分类器

    训练好 SVM 分类器后需要将它储存起来,在后续的代码中就可以利用它进行分类了。储存的代码也很简单:

    // save svm
    svm->save("mysvm.xml");
    

    实现分类

    (1)加载 SVM 分类器

    把储存好的分类器加载出来。

    Ptr<SVM> mysvm = StatModel::load<SVM>("mysvm.xml");
    

    (2)预测分类结果

    使用 predict 函数预测分类结果,函数原型如下。输入数据,返回预测结果。

    CV_WRAP virtual float predict( InputArray samples, 
        OutputArray results=noArray(), int flags=0 ) const = 0;
    

    总结

    以上就是 OpenCV 中 SVM 分类器的使用方法,我只是把最基本的步骤和所致用的函数列了出来。可以看出使用 OpenCV 库函数来实现 SVM 分类器还是很简单的,不需要理解SVM的具体原理。

    网上写 SVM 分类器的代码都很复杂,因为准备数据等等都是一个大工程,在我们使用的时候要根据具体情况自己写。不过最核心的部分就是以上啦!


    参考:
    http://www.coin163.com/it/2260012286132365332/svm-opencv
    https://blog.csdn.net/chaipp0607/article/details/68067098
    https://blog.csdn.net/xuan_zizizi/article/details/71102018

    相关文章

      网友评论

          本文标题:SVM分类器在OpenCV中的使用

          本文链接:https://www.haomeiwen.com/subject/tkpchftx.html