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 ...
随机推荐
- sql优化工具--美团SQLAdvisor
美团点评SQL优化工具SQLAdvisor开源 介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 S ...
- spring cache redis
一.使用开源包(spring-data-redis) 1.引入jar包 <dependency> <groupId>org.springframework.data& ...
- Android开发——子线程操作UI的几种方法
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 在看方法之前需要了解一下Android中的消息机制. 转载请标明出处:h ...
- WPF ProgressBar 样式
<ProgressBar Grid.Row="2" Foreground="#45d207" IsIndeterminate="True&quo ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
- BZOJ 1026: [SCOI2009]windy数 【数位dp】
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
- Java 面试参考指南 — 同步
同步 在多线程程序中,同步修饰符用来控制对临界区代码的访问.其中一种方式是用synchronized关键字来保证代码的线程安全性.在Java中,synchronized修饰的代码块或方法不会被多个线程 ...
- Spoj-NPC2015A Eefun Guessing Words
Eefun Guessing Words Eefun is currently learning to read. His way of learning is unique, by trying ...
- nmon性能分析工具(生成图表)
1. nmon性能结果生成报告工具下载地址: https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power% ...
- PHP socket 编程中的超时设置
PHP socket 编程中的超时设置.网上找了半天也没找到.贴出来分享之:设置$socket 发送超时1秒,接收超时3秒: $socket = socket_create(AF_INET,SOCK_ ...