转自:http://download.csdn.net/download/gaogaogao124/3125857

略有改动:

#include"stdafx.h"

#include<opencv2/opencv.hpp>

#include<cmath>

#include<ctime>

using namespace std;

int _tmain(int argc,_TCHAR*argv[])

{

intsize = 400;//图像的长度和宽度

constints = 1000;//试验点个数

inti,j, sv_num;

IplImage *img;

CvSVMsvm =CvSVM();//构造一个SVM类对象

CvSVMParamsparam;//SVM参数

CvTermCriteriacriteria;//迭代算法的结束条件

CvRNGrng =cvRNG(time(NULL));//随机数typedef uint64 CvRNG;

CvPointpts[s];

floatdata[s*2];

intres[s];

CvMatdata_mat,res_mat;

CvScalarrcolor;

constfloat *support;

img =cvCreateImage(cvSize(size,size),IPL_DEPTH_8U, 3);

cvSetZero(img);

//训练数据的生成,并将其值存放在pts中

for (i=0;i<s;i++)

{

pts[i].x =cvRandInt(&rng) %size;//用随机整数赋值

pts[i].y =cvRandInt(&rng) %size;

if (pts[i].y > 50 *cos(pts[i].x *CV_PI / 100) + 200)

{

cvLine(img, cvPoint(pts[i].x - 2,pts[i].y - 2),cvPoint(pts[i].x + 2,pts[i].y + 2),CV_RGB(255, 0, 0));

cvLine(img, cvPoint(pts[i].x + 2,pts[i].y - 2),cvPoint(pts[i].x - 2,pts[i].y + 2),CV_RGB(255, 0, 0));

res[i] = 1;

}

else

{

if (pts[i].x > 200)

{

cvLine(img, cvPoint(pts[i].x - 2,pts[i].y - 2),cvPoint(pts[i].x + 2,pts[i].y + 2),CV_RGB(0, 255, 0));

cvLine(img, cvPoint(pts[i].x + 2,pts[i].y - 2),cvPoint(pts[i].x - 2,pts[i].y + 2),CV_RGB(0, 255, 0));

res[i] = 2;

}

else

{

cvLine(img, cvPoint(pts[i].x - 2,pts[i].y - 2),cvPoint(pts[i].x + 2,pts[i].y + 2),CV_RGB(0, 0, 255));

cvLine(img, cvPoint(pts[i].x + 2,pts[i].y - 2),cvPoint(pts[i].x - 2,pts[i].y + 2),CV_RGB(0, 0, 255));

res[i] = 3;

}

}

}

cvNamedWindow("SVM",CV_WINDOW_AUTOSIZE);

cvShowImage("SVM",img);

cvWaitKey(0);

//学习参数的生成

for (i=0;i<s;i++)

{

data[i*2]   = float(pts[i].x) /size;

data[i*2+1] = float(pts[i].y) /size;

}

cvInitMatHeader(&data_mat,s, 2,CV_32FC1,data);

cvInitMatHeader(&res_mat,s, 1,CV_32SC1,res);

criteria =cvTermCriteria(CV_TERMCRIT_EPS, 1000,FLT_EPSILON);

param    =CvSVMParams(CvSVM::C_SVC,CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1,NULL, criteria);

//SVM学习

svm.train(&data_mat, &res_mat,NULL,NULL,param);

//学习结果绘图

for (i=0;i<size;i++)

{

for (j=0;j<size;j++)

{

CvMat m;

float ret = 0.0;

float a[] = {float(j) /size,float(i) /size};

cvInitMatHeader(&m, 1, 2, CV_32FC1, a);

ret = svm.predict(&m);//预测

switch ((int)ret)

{

case 1: rcolor = CV_RGB(100, 0, 0);break;

case 2: rcolor = CV_RGB(0, 100, 0);break;

case 3: rcolor = CV_RGB(0, 0, 100);break;

}

cvSet2D(img, i, j, rcolor);

}

}

cvNamedWindow("SVM1",CV_WINDOW_AUTOSIZE);

cvShowImage("SVM1",img);

cvWaitKey(0);

//训练数据绘制

for (i=0;i<s;i++)

{

CvScalar rcolor;

switch (res[i])

{

case 1: rcolor = CV_RGB(255, 0, 0); break;

case 2: rcolor = CV_RGB(0, 255, 0); break;

case 3: rcolor = CV_RGB(0, 0, 255); break;

}

cvLine(img, cvPoint(pts[i].x - 2,pts[i].y - 2),cvPoint(pts[i].x + 2,pts[i].y + 2),rcolor);

cvLine(img, cvPoint(pts[i].x + 2,pts[i].y - 2),cvPoint(pts[i].x - 2,pts[i].y + 2),rcolor);

}

//支持向量绘制

sv_num =svm.get_support_vector_count();

for (i=0;i<sv_num;i++)

{

support = svm.get_support_vector(i);

cvCircle(img, cvPoint((int)(support[0] *size), (int)(support[1] *size)), 5, CV_RGB(200, 200, 200));

}

cvNamedWindow("SVM2",CV_WINDOW_AUTOSIZE);

cvShowImage("SVM2",img);

cvWaitKey(0);

cvDestroyWindow("SVM");

cvDestroyWindow("SVM1");

cvDestroyWindow("SVM2");

cvReleaseImage(&img);

return 0;

}

参考文献:

1、  http://blog.csdn.net/firefight/article/details/6400060

2、  http://blog.sina.com.cn/s/blog_4298002e010144k8.html

3、 http://hi.baidu.com/pengjun/blog/item/215e50da73e6cdd2b6fd48b6.html

4、  http://blog.csdn.net/carson2005/article/details/6547250

5、  http://www.opencv.org.cn/index.php?oldid=8202&printable=yes&title=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C

OpenCV中SVM的使用相关推荐

  1. opencv画虚线_(四十四)OpenCV中的机器学习-SVM

    时间为友,记录点滴. 本来还想在特征点检测的道路上再走一走,学习一下Harr级联或者HOG什么的,但总有些概念感觉绕不过去.择日不如撞日,撞日不如今日.我们先揭开机器学习中的一个小角,看看大热的机器学 ...

  2. OpenCV中使用SVM分类器

    在opencv中支持SVM分类器,过程就是:先训练再预测(python实现) # svm 对于数据的要求: 所有的数据都要有label # [155,48] -- 0 女生 [152,53] ---1 ...

  3. OpenCV中HOG人检测以及Part Model latent SVM目标识别

    要做点视频中检测的小东西,发现OpenCV中已经十分全面了,要做的东西要用到Navneet Dalal and Bill Triggs的Histogram of Oriented Gradients ...

  4. OpenCV支持向量机SVM用于非线性可分离数据

    OpenCV支持向量机SVM用于非线性可分离数据 支持向量机SVM用于非线性可分离数据 目标 动机Motivation 优化问题的扩展 源代码 解释 设置训练数据 设置SVM的参数 训练SVM 显示决 ...

  5. OpenCV支持向量机SVM简介

    OpenCV支持向量机SVM简介 支持向量机SVM简介 目标 什么是SVM? 最佳超平面如何计算? 源代码 解释 设置训练数据 设置SVM的参数 由SVM分类的区域 支持向量 结果 支持向量机SVM简 ...

  6. OpenCV中神经网络的应用

    OpenCV中神经网络的应用 OpenCV中也提供神经网络的算法,下面对其中的一些参数进行介绍. 激活函数 OpenCV中提供三种激活函数,分别是线性激活函数.sigmoid激活函数和高斯激活函数. ...

  7. 基于opencv的SVM车牌号码识别模型训练(C++)QT

    条件:opencv-4.5,QT 一.准备数据集 下载车牌相关字符样本用于训练和测试,本文使用14个汉字样本和34个数字跟字母样本,每个字符样本数为40,样本尺寸为28*28. 二.计算样本HOG特征 ...

  8. OpenCV中图像特征提取与描述

    目录 图像特征提取与描述 图像的特征 Harris和Shi-Tomas算法 Harris角点检测 Shi-Tomasi角点检测 小结 SIFT/SURF算法 SIFT原理 基本流程 尺度空间极值检测 ...

  9. 机器学习分类器——案例(opencv sklearn svm ann)

    机器学习分类器--案例(opencv sklearn svm ann python) ps:最近师姐给我们留了一个任务,记录一下从一开始的什么都不懂到现在把任务做出来,并从中学习到的东西吧.... 语 ...

最新文章

  1. php无极分类非递归_无限极分类算法,对你一定有帮助
  2. 仿苹果手机闹钟_原来iPhone自带的闹钟这么好用,以前没发现,现在一直在用
  3. 使用LoadRunner对Web Services进行调用--Add Service Call
  4. HTML5概要与新增标签
  5. nginx 非socket代理配置
  6. Palm应用开发之四Palm 应用模型
  7. 被嘲“狗都不如”的那个人,年入1000万了
  8. linux make乱码,linux乱码
  9. 20190825:(leetcode习题)最长公共前缀
  10. 2.熟悉LINUX的基本操作
  11. 机器学习和深度学习_人工智能、机器学习和深度学习三者关系?
  12. 微信小程序app配置指南
  13. 微信小程序云开发视频教程上线啦
  14. 全文匹配方式查询(sql)
  15. Notepad++查看、编辑二进制文件——安装附加组件HexEditor实现
  16. API拦截的应用,网址劫持
  17. 160413、生成随机校验码
  18. envoy做集中式egress sidecar
  19. 大数据开发就业:大数据开发有哪些岗位
  20. desktop引用了一个不可用的位置

热门文章

  1. keras提取模型中的某一层_keras获得某一层或者某层权重的输出实例
  2. android 蓝牙 鼠标 app_Razer 雷蛇 那伽梵蛇 Pro 专业版 无线蓝牙鼠标 899元
  3. Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据
  4. Open3d 学习计划—13(Azure Kinect)
  5. Udacity机器人软件工程师课程笔记(二十) - 感知 - 校准,过滤, 分段, RANSAC
  6. Ubuntu 14.04 64bit上磁力链爬虫dht部署指南
  7. blktrace 工具集使用 及其实现原理
  8. C++ STL: 超详细 容器 deque 以及 适配器queue 和 stack 源码分析
  9. Spring注解@Value
  10. crontab修改默认编辑器