下面这是opencv官方文档中的代码,我加了一部分注释:

 #include "stdafx.h"
#include "opencv2/core/core.hpp"
#include "highgui.h"
#include "ml.h" using namespace cv; int _tmain(int argc, _TCHAR* argv[])
{
//
int width = , height = ;
Mat image = Mat::zeros(height, width, CV_8UC3); // set up training data
float labels[] = {1.0, 1.0, -1.0, -1.0};
Mat labelsMat(, , CV_32FC1, labels); float trainingData[][] = { {, }, {, }, {, }, {, } };
Mat trainingDataMat(, , CV_32FC1, trainingData); // set up SVM's parameters,具体参数设置请看下文
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, , 1e-); // train the svm
CvSVM SVM;
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params); Vec3b green(,,), blue(,,); // show the decision region given by the SVM
for (int i = ; i < image.rows; ++ i)
{
for (int j = ; j < image.cols; ++ j)
{
Mat sampleMat = (Mat_<float>(,) << i,j); // predict 函数使用训练好的SVM模型对一个输入的样本进行分类
float response = SVM.predict(sampleMat); if (response == )
{
// 注意这里是(j,i),不是(i,j)
image.at<Vec3b>(j,i) = green;
}
else
{
// 同上
image.at<Vec3b>(j,i) = blue;
}
}
} int thickness = -;
int lineType = ; circle(image, Point(, ), , Scalar( , , ), thickness, lineType);
circle(image, Point(, ), , Scalar( , , ), thickness, lineType);
circle(image, Point(, ), , Scalar(,,), thickness, lineType);
circle(image, Point( , ), , Scalar(,,), thickness, lineType); // show support vectors
thickness = ;
lineType = ; // 获得当前的支持向量的个数
int c = SVM.get_support_vector_count(); for (int i = ; i < c; ++ i)
{
const float* v = SVM.get_support_vector(i);
circle( image, Point( (int) v[], (int) v[]), , Scalar(, , ), thickness, lineType);
} imwrite("result.png", image); // save the image imshow("SVM Simple Example", image); // show it to the user
waitKey();
return ;
}

这里说一下CvSVMParams中的参数设置

 CV_SVM 中的参数设置

 svm_type:
CvSVM::C_SVC C-SVC
CvSVM::NU_SVC v-SVC
SvSVM::ONE_CLASS 一类SVM
CvSVM::EPS_SVR e-SVR
CvSVM::NU_SVR v-SVR kernel_type:
CvSVM::LINEAR 线性:u*v
CvSVM::POLY   多项式(r*u'v + coef0)^degree
CvSVM::RBF RBF函数: exp(-r|u-v|^)
CvSVM::SIGMOID sigmoid函数: tanh(r*u'v + coef0) 成员变量
degree: 针对多项式核函数degree的设置
gamma: 针对多项式/rbf/sigmoid核函数的设置
coef0: 针对多项式/sigmoid核函数的设置
Cvalue: 为损失函数,在C-SVC、e-SVR、v-SVR中有效
nu: 设置v-SVC、一类SVM和v-SVR参数
p: 为设置e-SVR中损失函数的值
class_weights: C_SVC的权重
term_crit: 为SVM训练过程的终止条件。
其中默认值 degree = ,
gamma = ,
coef0 = ,
Cvalue = ,
nu = ,
p = ,
class_weights =

OpenCV中使用SVM简介的更多相关文章

  1. OpenCV中的SVM參数优化

    SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...

  2. OpenCV中的SVM参数优化

    OpenCV中的SVM参数优化 svm参数优化opencv SVMSVR参数优化CvSVMopencv CvSVM        SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最常用的 ...

  3. opencv中的SVM图像分类(二)

    opencv中的SVM图像分类(二) 标签: svm图像 2015-07-30 08:45 8296人阅读 评论(35) 收藏 举报  分类: [opencv应用](5)  版权声明:本文为博主原创文 ...

  4. Opencv中SVM样本训练、归类流程及实现

    支持向量机(SVM)中最核心的是什么?个人理解就是前4个字--"支持向量",一旦在两类或多累样本集中定位到某些特定的点作为支持向量,就可以依据这些支持向量计算出来分类超平面,再依据 ...

  5. OpenCV机器学习库函数--SVM

    svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "o ...

  6. 【OpenCV】opencv3.0中的SVM训练 mnist 手写字体识别

    前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...

  7. Kemaswill 机器学习 数据挖掘 推荐系统 Ranking SVM 简介

    Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Le ...

  8. [OpenCV-Python] OpenCV 中机器学习 部分 VIII

    部分 VIII机器学习 OpenCV-Python 中文教程(搬运)目录 46 K 近邻(k-Nearest Neighbour ) 46.1 理解 K 近邻目标 • 本节我们要理解 k 近邻(kNN ...

  9. 【机器学习】Learning to Rank之Ranking SVM 简介

    Learning to Rank之Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning t ...

随机推荐

  1. tomcat启动后 404 页面无法访问

    如果修改端口后还不能访问,先关闭tomcat, 在bin目录下命令 ./shutdown.sh 找到80进程  netstat -an | grep 80 杀死80进程 ps -ef | grep h ...

  2. 关于Linux下安装Oracle

    参考文档:http://www.cnblogs.com/gaojun/archive/2012/11/22/2783257.html 中文字符集设置:    http://blog.csdn.net/ ...

  3. 【LeetCode】Game of Life(生命游戏)

    这道题是LeetCode里的第289道题. 题目描述: 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格 ...

  4. [android开发篇]java环境配置

    http://www.runoob.com/java/java-environment-setup.html Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. window ...

  5. 网页QQ唤起

    网页QQ唤起 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...

  6. TMOS_Order_of_Operations_v0.1

  7. BZOJ 4568 [Scoi2016]幸运数字 ——线性基 倍增

    [题目分析] 考虑异或的最大值,维护线性基就可以了. 但是有多次的询问,树剖或者倍增都可以. 想了想树剖动辄数百行的代码. 算了,我还是写倍增吧. 注:被位运算和大于号的优先级坑了一次,QaQ [代码 ...

  8. VS链接错误: LNIK1123

    问题:编译一个VS工程程序,出现连接错误:"LNK1123: 转换到 COFF 期间失败: 文件无效或损坏" 原因分析:连接器LNK是通过调用cvtres.exe完成文件向coff ...

  9. 转载:C++读取特定路径下文件目录及文件名称

    转载地址:http://www.cnblogs.com/tgyf/p/3839894.html void getAllFiles( string path, vector<string>& ...

  10. eq=等于gt=大于lt=小于的英文全称

    EQ: Equal GT: Greater Than LT: Less than 知道全称就不会忘记