OpenCV中SVM的使用
转自: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
相关文章:

数据不够,用GAN来凑!
作者 | CV君来源 | 我爱计算机视觉(ID:aicvml)在计算机视觉领域,深度学习方法已全方位在各个方向获得突破,这从近几年CVPR 的论文即可看出。但这往往需要大量的标注数据,比如最著明的ImageNet数据集&#x…

MySQL的登陆错误:ERROR 1049 (42000): Unknown database 'root'
刚刚装上数据库的时候,直接按照这个格式就登陆上去了,突然莫名其妙登陆不上去了 但是现在突然死活登陆不上去了 于是拿着这个报错信息在网上找啊找,终于找了了错误的原因 -p和密码是连在一起的,赶紧一试,果然可以登陆&…

分布式缓存系统Memcached简介与实践
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活。此时Memcached或许是你想要的。Memca…

Windows7 libsvm库中grid.py的使用步骤
1、从http://www.csie.ntu.edu.tw/~cjlin/libsvm/下载最新的libsvm-3.12库(libsvm-3.12.tar.gz或libsvm-3.12.zip),将其放到F:\libsvm文件夹下解压缩,生成一个libsvm-3.12文件夹; 2、从http://www.gnuplot.info/下载最新的gnuplot即gp460-wi…

基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法
作者 | Marat Dukhan from Google Research译者 | 凯隐责编 | Jane出品 | AI科技大本营(ID: rgznai100)【导读】本文介绍的内容主要聚焦Google 的一项最新工作:改变基于 GEMM 实现的 CNN底层算法提出的新方法。通用矩阵乘法(Gener…

共享内存跨进程通信
通过共享内存通信是最快的,不过既然是共享资源,那么就必须要有同步机制。 创建共享内存有两种方式shm和mmap的方式。 mmap是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行映射。而对于shm而言,shm每个进程最终会映射…

扶稳!四大步“上手”超参数调优教程,就等你出马了 | 附完整代码
作者 | Matthew Stewart译者 | Monanfei责编 | Jane出品 | AI科技大本营(ID: rgznai100)【导读】在本文中,我们将为大家介绍如何对神经网络的超参数进行优化调整,以便在 Beale 函数上获得更高性能,Beale 函数是评价优化…

读好书,写好程序
本人是做.NET开发的,以企业应用为主,以互联网为爱好,这里给大家推荐一些适合.NET程序员的书: 软件设计《企业应用架构模式》 Martin Fowler 的大作之一,总结了多种常见的企业应用架构模式,这些模式是脱离具…

SIFT特征点匹配中KD-tree与Ransac算法的使用
转自:http://blog.csdn.net/ijuliet/article/details/4471311 Step1:BBF算法,在KD-tree上找KNN。第一步做匹配咯~ 1.什么是KD-tree(fromwiki) K-Dimension tree,实际上是一棵平衡二叉树。 一般的KD-tree构造过程&a…

jQuery带缩略图的宽屏焦点图插件
在线演示 本地下载

追溯XLNet的前世今生:从Transformer到XLNet
作者丨李格映来源 | 转载自CSDN博客导读:2019 年 6 月,CMU 与谷歌大脑提出全新 XLNet,基于 BERT 的优缺点,XLNet 提出一种泛化自回归预训练方法,在 20 个任务上超过了 BERT 的表现,并在 18 个任务上取得了当…

微软MCITP系列课程
http://liushuo890.blog.51cto.com/5167996/d-1转载于:https://blog.51cto.com/showcart/1156172

在Ubuntu11.10中安装配置OpenCV2.3.1和CodeBlocks
1、 打开终端; 2、 执行指令,删除ffmpeg and x264旧版本:sudo apt-get removeffmpeg x264 libx264-dev 3、下载安装x264和ffmpeg所有的依赖:sudo apt-get update sudo apt-get installbuild-essential checkinstall git cmake…

深入浅出Rust Future - Part 1
本文译自Rust futures: an uneducated, short and hopefully not boring tutorial - Part 1,时间:2018-12-02,译者:motecshine, 简介:motecshine 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 Rust中文社区首页Rust…

cmd 修改文件属性
现在的病毒基本都会采用一种方式,就是将病毒文件的属性设置为系统隐藏属性以逃避一般用户的眼睛,而且由于Windows系统的关系,这类文件在图形界面下是不能修改其属性的。但是好在Windows还算做点好事,留下了一个attrib命令可以让我…

Django 视图
Django之视图 目录 一个简单的视图CBV和FBV FBV版:CBV版:给视图加装饰器 使用装饰器装饰FBV使用装饰器装饰CBVrequest对象 请求相关的常用值属性方法Response对象 使用属性JsonResponse对象Django shortcut functions render()redirect()Django的View&am…

喜大普奔!GitHub官方文档推出中文版
原创整理 | Python开发者(ID:PythonCoder)最近程序员交友圈出了一个大新闻,GitHub 帮助文档正式推出中文版了,之前一直都是只有英文文档,看起来费劲不方便。这份中文文当非常详尽,可以说有了它 …

Linux中获取当前程序路径的方法
1、命令行实现:转自:http://www.linuxdiyf.com/viewarticle.php?id84177 #!/bin/sh cur_dir$(pwd) echo $cur_dir 注意:在cur_dir后没空格,后面也不能有空格,不然它会认为空格不是路径而报错 2、程序实现…

android 关于字符转化问题
今日在写android的客户端,发现字符转化是个大问题。 下面是Unicode转UTF-8的转化,便于以后使用 private static String decodeUnicode(String theString) { char aChar; int len theString.length(); StringBuffer outBuffer new Strin…

30分钟看懂XGBoost的基本原理
作者 | 梁云1991转载自Python与算法之美(ID: Python_Ai_Road)一、XGBoost和GBDTxgboost是一种集成学习算法,属于3类常用的集成方法(bagging,boosting,stacking)中的boosting算法类别。它是一个加法模型,基模型一般选择树模型&…

Linux下遍历文件夹的实现
转自:http://blog.csdn.net/wallwind/article/details/7528474 linux C 遍历目录及其子目录 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <dirent.h> #include <sys/stat.h> #include <unistd.h&…

如何用Python画一棵漂亮的树
Tree海龟绘图turtle 在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。 海龟绘图(Turtle Graphics)后来…

windows7下,Java中利用JNI调用c++生成的动态库的使用步骤
1、从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-windows-i586.exe,安装到D:\ProgramFiles\Java,并将D:\ProgramFiles\Java\jdk1.7.0_02\bin添加到环境变量中; 2、从http://www.ec…

外观模式 - 设计模式学习
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 怎么叫更加容易使用呢?多个方法变成一个方法,在外观看来,只需知道这个功能完成…

Google最新论文:大规模深度推荐模型的特征嵌入问题有解了!
转载自深度传送门(ID: gh_5faae7b50fc5)导读:本文主要介绍下Google在大规模深度推荐模型上关于特征嵌入的最新论文。 一、背景大部分的深度学习模型主要包含如下的两大模块:输入模块以及表示学习模块。自从NAS[1]的出现以来&#…

[20181204]低版本toad 9.6直连与ora-12505.txt
[20181204]低版本toad 9.6直连与ora-12505.txt--//我们生产系统还保留有一台使用AMERICAN_AMERICA.US7ASCII字符集的数据库,这样由于toad新版本不支持该字符集的中文显示.--//我一直保留toad 9.6的版本,并且这个版本是32位的,我必须在我的机器另外安装10g 32位版本的客户端,这样…

Google揭露美国政府通过NSL索要用户资料
当美国联邦调查局FB或其他美国执法机构进行有关国家安全的调查时,能通过一种“国家安全密函National Security ,NSL)”向服务商索取其用户的个人资料,由于事关国家安全,因此该密函并不需经法院同意。但根据美国电子通讯隐私法的规…

Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤
1、 打开新立得包管理器,搜索JDK,选择openjdk-6-jdk安装; 2、 打开Ubuntu软件中心,搜索Eclipse,选择Eclipse集成开发环境,安装; 3、 打开Eclipse,File-->New-->Java Proj…

比Hadoop快至少10倍的物联网大数据平台,我把它开源了
作者 | 陶建辉转载自爱倒腾的程序员(ID: taosdata)导读:7月12日,涛思数据的TDengine物联网大数据平台宣布正式开源。涛思数据希望尽最大努力打造开发者社区,维护这个开源的商业模式,他们相信不将最核心的代…