日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV中SVM的使用

發布時間:2023/11/27 生活经验 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的OpenCV中SVM的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:OpenCV中SVM的使用