欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

利用SVM解决2维空间向量的3级分类问题

程序员文章站 2022-04-25 16:01:55
...

【原文:http://blog.csdn.net/firefight/article/details/6400060】 为了学习OPENCV SVM分类器, 参考网上的 利用SVM解决2维空间向量的分类问题 实现并改为C代码,仅供参考 环境:OPENCV2.2 VS2008 步骤: 1,生成随机的点,并按一定的空间分布将其归类 2,

【原文:http://blog.csdn.net/firefight/article/details/6400060】

为了学习OPENCV SVM分类器, 参考网上的"利用SVM解决2维空间向量的分类问题"实现并改为C++代码,仅供参考

环境:OPENCV2.2 + VS2008

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

[cpp] view plaincopy

  1. #include "stdafx.h"
  2. #include
  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
  20. {
  21. int row = rand() % rows;
  22. int col = rand() % cols;
  23. if(testPoint.atchar>(row, col) == 0)
  24. {
  25. testPoint.atchar>(row, col) = 1;