【原文: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
- #include "stdafx.h"
-
#include
- void drawCross(Mat &img, Point center, Scalar color)
- {
- int col = center.x > 2 ? center.x : 2;
- int row = center.y> 2 ? center.y : 2;
- line(img, Point(col -2, row - 2), Point(col + 2, row + 2), color);
- line(img, Point(col + 2, row - 2), Point(col - 2, row + 2), color);
- }
- int newSvmTest(int rows, int cols, int testCount)
- {
- if(testCount > rows * cols)
- return 0;
- Mat img = Mat::zeros(rows, cols, CV_8UC3);
- Mat testPoint = Mat::zeros(rows, cols, CV_8UC1);
- Mat data = Mat::zeros(testCount, 2, CV_32FC1);
- Mat res = Mat::zeros(testCount, 1, CV_32SC1);
- //Create random test points
- for (int i= 0; i
- {
- int row = rand() % rows;
- int col = rand() % cols;
-
if(testPoint.at
char>(row, col) == 0) - {
-
testPoint.at
char >(row, col) = 1; - data.atfloat>(i, 0) = float (col) / cols;
- data.atfloat>(i, 1) = float (row) / rows;
- }
- else
- {
- i--;
- continue;
- }
- if (row > ( 50 * cos(col * CV_PI/ 100) + 200) )
- {
- drawCross(img, Point(col, row), CV_RGB(255, 0, 0));
-
res.at
int >(i, 0) = 1; - }
- else
- {
- if (col > 200)
- {
- drawCross(img, Point(col, row), CV_RGB(0, 255, 0));
-
res.at
int >(i, 0) = 2; - }
- else
- {
- drawCross(img, Point(col, row), CV_RGB(0, 0, 255));
-
res.at
int >(i, 0) = 3; - }
- }
- }
- //Show test points
- imshow("dst", img);
- waitKey(0);
- /////////////START SVM TRAINNING//////////////////
- CvSVM svm = CvSVM();
- CvSVMParams param;
- CvTermCriteria criteria;
- criteria= cvTermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
-
/* SVM种类:CvSVM::C_SVC
Kernel的种类:CvSVM::RBF
degree:10.0(此次不使用)
gamma:8.0
coef0:1.0(此次不使用)
C:10.0
nu:0.5(此次不使用)
p:0.1(此次不使用)
然后对训练数据正规化处理,并放在CvMat型的数组里。*/
- param= CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1, NULL, criteria);
- svm.train(data, res, Mat(), Mat(), param);
- for (int i= 0; i
- {
- for (int j= 0; j
- {
- Mat m = Mat::zeros(1, 2, CV_32FC1);
- m.atfloat>(0,0) = float (j) / cols;
- m.atfloat>(0,1) = float (i) / rows;
- float ret = 0.0;
- ret = svm.predict(m);
- Scalar rcolor;
- 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;
- }
- line(img, Point(j,i), Point(j,i), rcolor);
- }
- }
- imshow("dst", img);
- waitKey(0);
- //Show support vectors
- int sv_num= svm.get_support_vector_count();
- for (int i= 0; i
- {
- const float* support = svm.get_support_vector(i);
- circle(img, Point((int) (support[0] * cols), (int) (support[1] * rows)), 5, CV_RGB(200, 200, 200));
- }
- imshow("dst", img);
- waitKey(0);
- return 0;
- }
- int main(int argc, char** argv)
- {
- return newSvmTest(400, 600, 100);
- }
学习样本:
分类:
支持向量:

Golang(Go编程语言)是一种基于C语言的编程语言,被广泛用于Web开发、网络编程、操作系统等领域。然而,在编写Golang程序时经常会遇到一个常见的问题,就是“undeclaredname”(未声明名称)错误。下面将介绍如何解决这个问题。了解错误信息在编译和运行Golang程序时,如果遇到了未声明名称错误,会在控制台输出相应的错误信

Python中的支持向量机(SupportVectorMachine,SVM)是一个强大的有监督学习算法,可以用来解决分类和回归问题。SVM在处理高维度数据和非线性问题的时候表现出色,被广泛地应用于数据挖掘、图像分类、文本分类、生物信息学等领域。在本文中,我们将介绍在Python中使用SVM进行分类的实例。我们将使用scikit-learn库中的SVM模

如何利用GitLab进行项目文档管理一、背景介绍在软件开发过程中,项目文档是非常重要的资料,不仅能够帮助开发团队了解项目的需求和设计,还能提供给测试团队和客户参考。为了方便项目文档的版本控制和团队协作,我们可以利用GitLab来进行项目文档管理。GitLab是一个基于Git的版本控制系统,除了支持代码管理,还可以管理项目文档。二、GitLab环境搭建首先,我

Java中的ClassNotFoundException是一种常见的编译错误。当我们尝试使用Java虚拟机(JVM)加载某个类时,如果JVM找不到该类,就会抛出ClassNotFoundException。这个错误可能出现在程序运行时,也可能出现在编译时。在本文中,我们将讨论什么是ClassNotFoundException,它为什么会发生以及如何解决它。C

Go语言是一门越来越受欢迎的编程语言,它的简洁、高效、易于编写的特点已经被越来越多的开发者所认可。而在Go语言开发中,遇到编译错误是不可避免的。其中一个常见的错误就是“undefined:json.Marshal”。这个错误通常发生在你使用了Go标准库的“encoding/json”包时,编译器提示找不到“json.Marshal”的定义。这个问题的根本原

随着Java的广泛应用,Java程序在连接数据库时经常会出现JDBC错误。JDBC(JavaDatabaseConnectivity)是Java中用于连接数据库的编程接口,因此,JDBC错误是在Java程序与数据库交互时遇到的一种错误。下面将介绍一些最常见的JDBC错误及如何解决和避免它们。ClassNotFoundException这是最常见的JDBC

在golang中,函数在定义时需要明确返回值类型和返回值,但有时候会出现“missingreturn…”的错误,表示函数缺少返回语句。本文将介绍如何解决这个问题。确认函数签名如果在定义函数时声明了返回值类型,但没有返回具体的值,就会触发这个错误。因此,你可以先检查函数签名,确认声明了返回值类型。举个例子:funcadd(a,bint)int{

Go语言作为一门快速发展的编程语言,被广泛应用于各种项目和领域。然而,在使用golang编写程序时,你有可能会遇到一些报错,其中一个常见的报错是“undefinedvariableorfunction”。那么,这个错误是什么意思?它是如何产生的?又该如何解决呢?本文将会对这些问题进行探讨。首先,我们需要了解一些基本概念。在golang中,变量和函数是两


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

禅工作室 13.0.1
功能强大的PHP集成开发环境