OpenCV中使用SVM简介
下面这是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简介的更多相关文章
- OpenCV中的SVM參数优化
SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...
- OpenCV中的SVM参数优化
OpenCV中的SVM参数优化 svm参数优化opencv SVMSVR参数优化CvSVMopencv CvSVM SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最常用的 ...
- opencv中的SVM图像分类(二)
opencv中的SVM图像分类(二) 标签: svm图像 2015-07-30 08:45 8296人阅读 评论(35) 收藏 举报 分类: [opencv应用](5) 版权声明:本文为博主原创文 ...
- Opencv中SVM样本训练、归类流程及实现
支持向量机(SVM)中最核心的是什么?个人理解就是前4个字--"支持向量",一旦在两类或多累样本集中定位到某些特定的点作为支持向量,就可以依据这些支持向量计算出来分类超平面,再依据 ...
- OpenCV机器学习库函数--SVM
svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "o ...
- 【OpenCV】opencv3.0中的SVM训练 mnist 手写字体识别
前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...
- Kemaswill 机器学习 数据挖掘 推荐系统 Ranking SVM 简介
Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Le ...
- [OpenCV-Python] OpenCV 中机器学习 部分 VIII
部分 VIII机器学习 OpenCV-Python 中文教程(搬运)目录 46 K 近邻(k-Nearest Neighbour ) 46.1 理解 K 近邻目标 • 本节我们要理解 k 近邻(kNN ...
- 【机器学习】Learning to Rank之Ranking SVM 简介
Learning to Rank之Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning t ...
随机推荐
- PHP-redis命令之 字符串 (strings)
一.string (字符串) 1.set:设置键 $reids->set('mykey',111); 2.get:获取键 $redis->get('mykey'); 3.del:删除键 $ ...
- appium+python自动化-adb shell模拟点击事件(input tap)
前言 appium有时候定位一个元素很难定位到,或者说明明定位到这个元素了,却无法点击,这个时候该怎么办呢? 求助大神是没用的,点击不了就是点击不了,appium不是万能的,这个时候应该转换思路,换其 ...
- PHP过滤器 filter_has_var() 函数
定义和用法 filter_has_var() 函数检查是否存在指定输入类型的变量. 如果成功则返回 TRUE,如果失败则返回 FALSE. 语法 filter_has_var(type, variab ...
- poj2104&&poj2761 (主席树&&划分树)主席树静态区间第k大模板
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 43315 Accepted: 14296 Ca ...
- hdu 2177 威佐夫博弈变形
取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 九度oj 题目1091:棋盘游戏
题目描述: 有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代价最小的路径: 1.只能沿上下左右四个方向移动 2.总代价是没走一步的 ...
- OSQL 用法
osql中的启动参数如下: -?:列出osql各个参数的语法摘要. -U login_id:用来指出登录名称,登录名区分大小写. -P password:用来指出登录名称所对应的密码. -E:表示采用 ...
- BZOJ 2176 Strange string ——最小表示法
本来想用来练习后缀自动机的,但是100w有点虚(事实证明确实T掉了). 只好上最小表示法. #include <cstdio> #include <cstring> #incl ...
- BZOJ3261 最大异或和 【可持久化trie树】
题目 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满 ...
- log4j详细配置解析
出自:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记录 ...