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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV的支持向量机SVM的程序

發(fā)布時(shí)間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV的支持向量机SVM的程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

步驟:
1,生成隨機(jī)的點(diǎn),并按一定的空間分布將其歸類(lèi)
2,創(chuàng)建SVM并利用隨機(jī)點(diǎn)樣本進(jìn)行訓(xùn)練
3,將整個(gè)空間按SVM分類(lèi)結(jié)果進(jìn)行劃分,并顯示支持向量

?

[cpp]?view plaincopy
  • #include?"stdafx.h"??
  • #include?<opencv2/opencv.hpp>??
  • ??
  • 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<?testCount;?i++)???
  • ????{???
  • ????????int?row?=?rand()?%?rows;??
  • ????????int?col?=?rand()?%?cols;??
  • ??
  • ????????if(testPoint.at<unsigned?char>(row,?col)?==?0)??
  • ????????{??
  • ????????????testPoint.at<unsigned?char>(row,?col)?=?1;??
  • ????????????data.at<float>(i,?0)?=?float?(col)?/?cols;???
  • ????????????data.at<float>(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<unsigned?int>(i,?0)?=?1;???
  • ????????}???
  • ????????else???
  • ????????{???
  • ????????????if?(col?>?200)???
  • ????????????{???
  • ????????????????drawCross(img,?Point(col,?row),?CV_RGB(0,?255,?0));??
  • ????????????????res.at<unsigned?int>(i,?0)?=?2;???
  • ????????????}???
  • ????????????else???
  • ????????????{???
  • ????????????????drawCross(img,?Point(col,?row),?CV_RGB(0,?0,?255));??
  • ????????????????res.at<unsigned?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);???
  • ????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<?rows;?i++)???
  • ????{???
  • ????????for?(int?j=?0;?j<?cols;?j++)???
  • ????????{???
  • ????????????Mat?m?=?Mat::zeros(1,?2,?CV_32FC1);??
  • ????????????m.at<float>(0,0)?=?float?(j)?/?cols;??
  • ????????????m.at<float>(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<?sv_num;?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);??
  • }??
  • ?

    學(xué)習(xí)樣本:

    ?

    分類(lèi):

    ?

    支持向量:

    總結(jié)

    以上是生活随笔為你收集整理的OpenCV的支持向量机SVM的程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。