当前位置: 首页 > 编程日记 > 正文

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君来源 | 我爱计算机视觉&#xff08;ID&#xff1a;aicvml&#xff09;在计算机视觉领域&#xff0c;深度学习方法已全方位在各个方向获得突破&#xff0c;这从近几年CVPR 的论文即可看出。但这往往需要大量的标注数据&#xff0c;比如最著明的ImageNet数据集&#x…

MySQL的登陆错误:ERROR 1049 (42000): Unknown database 'root'

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

分布式缓存系统Memcached简介与实践

缘起: 在数据驱动的web开发中&#xff0c;经常要重复从数据库中取出相同的数据&#xff0c;这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存&#xff0c;但还是不够灵活。此时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)&#xff0c;将其放到F:\libsvm文件夹下解压缩&#xff0c;生成一个libsvm-3.12文件夹&#xff1b; 2、从http://www.gnuplot.info/下载最新的gnuplot即gp460-wi…

基于GEMM实现的CNN底层算法被改?Google提出全新间接卷积算法

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

共享内存跨进程通信

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

扶稳!四大步“上手”超参数调优教程,就等你出马了 | 附完整代码

作者 | Matthew Stewart译者 | Monanfei责编 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】在本文中&#xff0c;我们将为大家介绍如何对神经网络的超参数进行优化调整&#xff0c;以便在 Beale 函数上获得更高性能&#xff0c;Beale 函数是评价优化…

读好书,写好程序

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

SIFT特征点匹配中KD-tree与Ransac算法的使用

转自&#xff1a;http://blog.csdn.net/ijuliet/article/details/4471311 Step1:BBF算法&#xff0c;在KD-tree上找KNN。第一步做匹配咯~ 1.什么是KD-tree&#xff08;fromwiki&#xff09; K-Dimension tree&#xff0c;实际上是一棵平衡二叉树。 一般的KD-tree构造过程&a…

jQuery带缩略图的宽屏焦点图插件

在线演示 本地下载

追溯XLNet的前世今生:从Transformer到XLNet

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

微软MCITP系列课程

http://liushuo890.blog.51cto.com/5167996/d-1转载于:https://blog.51cto.com/showcart/1156172

在Ubuntu11.10中安装配置OpenCV2.3.1和CodeBlocks

1、 打开终端&#xff1b; 2、 执行指令&#xff0c;删除ffmpeg and x264旧版本&#xff1a;sudo apt-get removeffmpeg x264 libx264-dev 3、下载安装x264和ffmpeg所有的依赖&#xff1a;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&#xff0c;时间&#xff1a;2018-12-02&#xff0c;译者:motecshine, 简介&#xff1a;motecshine 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 Rust中文社区首页Rust…

cmd 修改文件属性

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

Django 视图

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

喜大普奔!GitHub官方文档推出中文版

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

Linux中获取当前程序路径的方法

1、命令行实现&#xff1a;转自&#xff1a;http://www.linuxdiyf.com/viewarticle.php?id84177 #!/bin/sh cur_dir$(pwd) echo $cur_dir 注意&#xff1a;在cur_dir后没空格&#xff0c;后面也不能有空格&#xff0c;不然它会认为空格不是路径而报错 2、程序实现&#xf…

android 关于字符转化问题

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

30分钟看懂XGBoost的基本原理

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

Linux下遍历文件夹的实现

转自&#xff1a;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年&#xff0c;Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言&#xff0c;它的特色就是通过编程指挥一个小海龟&#xff08;turtle&#xff09;在屏幕上绘图。 海龟绘图&#xff08;Turtle Graphics&#xff09;后来…

windows7下,Java中利用JNI调用c++生成的动态库的使用步骤

1、从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-windows-i586.exe&#xff0c;安装到D:\ProgramFiles\Java&#xff0c;并将D:\ProgramFiles\Java\jdk1.7.0_02\bin添加到环境变量中&#xff1b; 2、从http://www.ec…

外观模式 - 设计模式学习

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

Google最新论文:大规模深度推荐模型的特征嵌入问题有解了!

转载自深度传送门&#xff08;ID: gh_5faae7b50fc5&#xff09;导读&#xff1a;本文主要介绍下Google在大规模深度推荐模型上关于特征嵌入的最新论文。 一、背景大部分的深度学习模型主要包含如下的两大模块&#xff1a;输入模块以及表示学习模块。自从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或其他美国执法机构进行有关国家安全的调查时&#xff0c;能通过一种“国家安全密函National Security &#xff0c;NSL)”向服务商索取其用户的个人资料&#xff0c;由于事关国家安全&#xff0c;因此该密函并不需经法院同意。但根据美国电子通讯隐私法的规…

Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤

1、 打开新立得包管理器&#xff0c;搜索JDK&#xff0c;选择openjdk-6-jdk安装&#xff1b; 2、 打开Ubuntu软件中心&#xff0c;搜索Eclipse&#xff0c;选择Eclipse集成开发环境&#xff0c;安装&#xff1b; 3、 打开Eclipse&#xff0c;File-->New-->Java Proj…

比Hadoop快至少10倍的物联网大数据平台,我把它开源了

作者 | 陶建辉转载自爱倒腾的程序员&#xff08;ID: taosdata&#xff09;导读&#xff1a;7月12日&#xff0c;涛思数据的TDengine物联网大数据平台宣布正式开源。涛思数据希望尽最大努力打造开发者社区&#xff0c;维护这个开源的商业模式&#xff0c;他们相信不将最核心的代…