步骤:
1,生成随机的点,并按一定的空间分布将其归类
2,创建SVM并利用随机点样本进行训练
3,将整个空间按SVM分类结果进行划分,并显示支持向量

[cpp] view plaincopy
  1. #include "stdafx.h"
  2. #include <opencv2/opencv.hpp>
  3. void drawCross(Mat &img, Point center, Scalar color)
  4. {
  5. int col = center.x > 2 ? center.x : 2;
  6. int row = center.y> 2 ? center.y : 2;
  7. line(img, Point(col -2, row - 2), Point(col + 2, row + 2), color);
  8. line(img, Point(col + 2, row - 2), Point(col - 2, row + 2), color);
  9. }
  10. int newSvmTest(int rows, int cols, int testCount)
  11. {
  12. if(testCount > rows * cols)
  13. return 0;
  14. Mat img = Mat::zeros(rows, cols, CV_8UC3);
  15. Mat testPoint = Mat::zeros(rows, cols, CV_8UC1);
  16. Mat data = Mat::zeros(testCount, 2, CV_32FC1);
  17. Mat res = Mat::zeros(testCount, 1, CV_32SC1);
  18. //Create random test points
  19. for (int i= 0; i< testCount; i++)
  20. {
  21. int row = rand() % rows;
  22. int col = rand() % cols;
  23. if(testPoint.at<unsigned char>(row, col) == 0)
  24. {
  25. testPoint.at<unsigned char>(row, col) = 1;
  26. data.at<float>(i, 0) = float (col) / cols;
  27. data.at<float>(i, 1) = float (row) / rows;
  28. }
  29. else
  30. {
  31. i--;
  32. continue;
  33. }
  34. if (row > ( 50 * cos(col * CV_PI/ 100) + 200) )
  35. {
  36. drawCross(img, Point(col, row), CV_RGB(255, 0, 0));
  37. res.at<unsigned int>(i, 0) = 1;
  38. }
  39. else
  40. {
  41. if (col > 200)
  42. {
  43. drawCross(img, Point(col, row), CV_RGB(0, 255, 0));
  44. res.at<unsigned int>(i, 0) = 2;
  45. }
  46. else
  47. {
  48. drawCross(img, Point(col, row), CV_RGB(0, 0, 255));
  49. res.at<unsigned int>(i, 0) = 3;
  50. }
  51. }
  52. }
  53. //Show test points
  54. imshow("dst", img);
  55. waitKey(0);
  56. /START SVM TRAINNING//
  57. CvSVM svm = CvSVM();
  58. CvSVMParams param;
  59. CvTermCriteria criteria;
  60. criteria= cvTermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
  61. param= CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1, NULL, criteria);
  62. svm.train(data, res, Mat(), Mat(), param);
  63. for (int i= 0; i< rows; i++)
  64. {
  65. for (int j= 0; j< cols; j++)
  66. {
  67. Mat m = Mat::zeros(1, 2, CV_32FC1);
  68. m.at<float>(0,0) = float (j) / cols;
  69. m.at<float>(0,1) = float (i) / rows;
  70. float ret = 0.0;
  71. ret = svm.predict(m);
  72. Scalar rcolor;
  73. switch ((int) ret)
  74. {
  75. case 1: rcolor= CV_RGB(100, 0, 0); break;
  76. case 2: rcolor= CV_RGB(0, 100, 0); break;
  77. case 3: rcolor= CV_RGB(0, 0, 100); break;
  78. }
  79. line(img, Point(j,i), Point(j,i), rcolor);
  80. }
  81. }
  82. imshow("dst", img);
  83. waitKey(0);
  84. //Show support vectors
  85. int sv_num= svm.get_support_vector_count();
  86. for (int i= 0; i< sv_num; i++)
  87. {
  88. const float* support = svm.get_support_vector(i);
  89. circle(img, Point((int) (support[0] * cols), (int) (support[1] * rows)), 5, CV_RGB(200, 200, 200));
  90. }
  91. imshow("dst", img);
  92. waitKey(0);
  93. return 0;
  94. }
  95. int main(int argc, char** argv)
  96. {
  97. return newSvmTest(400, 600, 100);
  98. }

学习样本:

分类:

支持向量:

OpenCV的支持向量机SVM的程序相关推荐

  1. Python,OpenCV基于支持向量机SVM的手写数字OCR

    Python,OpenCV基于支持向量机SVM的手写数字OCR 1. 效果图 2. SVM及原理 2. 源码 2.1 SVM的手写数字OCR 2.2 非线性SVM 参考 上一节介绍了基于KNN的手写数 ...

  2. [C++/Learning] 基于SMO的非线性支持向量机(SVM)可视化程序(附代码)

    前段时间一直准备在期末考试(竟然连着近2个月!),完全没时间捣鼓这些小玩意儿.现在准备过年终于有时间写代码了~.于是我就写了这样的一个SVM可视化程序来练练手. 这篇文章将提供基于smo求解SVM问题 ...

  3. 【opencv机器学习】支持向量机SVM的程序

    转载来源于 http://blog.csdn.net/firefight/article/details/6400060 为了学习OPENCV SVM分类器, 参考网上的"利用SVM解决2维 ...

  4. OpenCV的HOG+SVM训练程序注意事项

    关于训练程序我封装了一份,大家可以参考一下 http://download.csdn.net/detail/xidianzhimeng/8270413 样本的配置与OpenCV训练Adaboost的类 ...

  5. OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理

    支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...

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

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

  7. OpenCV支持向量机SVM的实例(附完整代码)

    OpenCV支持向量机SVM的实例 OpenCV支持向量机SVM的实例 OpenCV支持向量机SVM的实例 #include <opencv2/core.hpp> #include < ...

  8. OpenCV支持向量机SVM和SDG算法的实例(附完整代码)

    OpenCV支持向量机SVM和SDG算法的实例 OpenCV支持向量机SVM和SDG算法的实例 OpenCV支持向量机SVM和SDG算法的实例 #include "opencv2/core. ...

  9. OpenCV支持向量机SVM简介

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

最新文章

  1. 如何写好一篇科技论文?以Wiley科技刊为例(附视频)
  2. springmvc DispatchServlet初始化九大加载策略(二)
  3. 学python有必要买书吗-要不要学python
  4. PAT甲级1012 The Best Rank :[C++题解]4个成绩取排名最低:排序、二分(好题)
  5. 二叉树的基本操作之二叉排序树
  6. 手把手教你使用 Clion 开发 Linux C++ 项目
  7. paip.使用继承机制来实现控制反转或依赖倒置
  8. C语言知识点总结2022
  9. 飞行控制系统中高度的表示
  10. 如何完美的卸载Office2007?
  11. php数据可视化相关内容_漏刻有时基于Echarts的php数据管理后台的数据可视化大屏代码...
  12. win10系统无线服务器出错,win10系统中Wi-Fi证书错误的解决方法
  13. mac下面如何修改只读文件
  14. 自学微信二次开发(1)
  15. 模数转换器ADC的常用术语和主要技术s指标(完)
  16. 别人的计算机网络看不到,局域网内看不到别人的电脑怎么办
  17. mfc程序退出时删除托盘图标
  18. math.h数学函数
  19. Davinci Resolve Studio 17d5达芬奇调色软件专业版
  20. 让你的APP轻松加上扫描二维码功能

热门文章

  1. Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
  2. [驱动注册]platform_driver_register()与platform_device_register()
  3. platform_device与platform_driver
  4. Scrum之 站立例会
  5. 在linux命令下如何访问一个url?
  6. 关于物理像素/逻辑像素
  7. lvs-nat负载均衡模式
  8. 设置树莓派开机自动运行代码
  9. bootstrap下拉列表与输入框组结合的样式调整
  10. 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器