Skip to content

Instantly share code, notes, and snippets.

@volkansalma
Created March 27, 2011 09:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save volkansalma/889071 to your computer and use it in GitHub Desktop.
Save volkansalma/889071 to your computer and use it in GitHub Desktop.
opencv svm sample
#include<iostream>
#include <cv.h>
#include <cxcore.h>
#include <ml.h>
using namespace std;
int main()
{
CvSVM SVM;
CvMat trainData;
CvMat labels;
CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_EPS,100,0.001); //eğitim için term kriterimiz.
int array_labels[5]= {1,1,1,-1,-1}; //5 eğitim verisinin bildiğimiz etiketleri.(labels, responses).
//ilk 3 veri 1 sınıfına, diğer iki veri ise -1 sınıfına ait.
//eğitim verilerini diziye doldurdum. Gerçek uygulamalarda filedan okuma veya hesaplama şeklinde olur.
//kodu basit tutmak için bu şekilde gösterdim.
#pragma region data
//5 egitim verisi olsun herbiri 40 tane feature içersin.
float array_trainData[5][40] = { 1,0.443137,0.333333,0.392157,0.0313725,
0.270588,0.870588,0.964706,1,0.439216,
0.337255,0.380392,0.0235294,0.266667,0.862745,
0.964706,1,0.431373,0.337255,0.368627,
0.0156863, 0.262745, 0.854902, 0.964706, 1,
0.423529, 0.341176, 0.360784, 0.0156863, 0.258824,
0.847059, 0.964706, 1, 0.419608, 0.341176,
0.34902, 0.0117647, 0.254902, 0.839216, 0.968627,
0.572549,0.4,0.113725,0.0784314,0.137255,
0.160784,0.00784314,0.337255,0.580392,0.407843,
0.121569, 0.0745098, 0.133333, 0.156863, 0.00392157,
0.341176, 0.584314, 0.411765, 0.12549, 0.0666667 ,
0.129412, 0.152941, 0, 0.34902, 0.592157,
0.419608, 0.129412, 0.0588235, 0.12549, 0.14902,
0.00392157, 0.352941, 0.596078, 0.423529, 0.137255,
0.054902, 0.121569, 0.145098, 0.00784314, 0.356863,
0.882353, 0.741176, 0.305882, 0.305882, 0.278431,
0.141176, 0.156863, 0.509804, 0.882353, 0.741176,
0.305882, 0.305882, 0.27451, 0.141176, 0.14902,
0.501961, 0.886275, 0.741176, 0.305882, 0.305882,
0.270588, 0.141176, 0.141176, 0.498039, 0.886275,
0.741176, 0.305882, 0.305882, 0.266667, 0.141176,
0.137255, 0.490196, 0.886275, 0.737255, 0.305882,
0.305882, 0.266667, 0.137255, 0.129412, 0.486275,
0.929412, 0.917647, 0.717647, 0.356863, 0.133333,
0.156863, 0.231373, 0.709804, 0.929412, 0.913725,
0.721569, 0.356863, 0.137255, 0.164706, 0.219608,
0.694118, 0.92549, 0.905882, 0.729412, 0.356863,
0.141176, 0.168627, 0.207843,0.67451, 0.917647,
0.901961, 0.733333, 0.360784, 0.141176, 0.172549,
0.196078, 0.658824, 0.909804, 0.894118, 0.737255,
0.360784, 0.141176, 0.180392,0.180392, 0.639216,
0.760784, 0.372549, 0.407843, 0.298039, 0.160784,
0.72549, 0.988235, 0.960784, 0.772549, 0.372549,
0.411765, 0.305882, 0.160784, 0.709804, 0.992157,
0.960784, 0.780392, 0.376471, 0.419608, 0.309804,
0.160784, 0.698039, 0.992157, 0.960784, 0.784314,
0.376471, 0.419608, 0.317647, 0.164706, 0.686275,
0.996078, 0.964706, 0.792157, 0.376471, 0.423529,
0.32549, 0.160784, 0.670588, 1, 0.964706
};
#pragma endregion data
cvInitMatHeader(&trainData,5,40,CV_32FC1,array_trainData); //eğitim verimizi tutacak matris.
cvInitMatHeader(&labels,1,5,CV_32SC1,array_labels); //etiketlerimizi tutacak matris.
//classification olduğu için CV_32SC1 kullandık.
SVM.train(&trainData,&labels,0,0,CvSVMParams(CvSVM::C_SVC,CvSVM::RBF,3,0.025,0,1,0.5,0.1,NULL,
criteria)); //train fonksiyonumuz (libsvm ile kontrol etmek için libsvm ile
//gelen svm-train.exe nin default parametreleri kullanıldı.)
//Parametrelerin detaylı açıklaması için opencv docs.
//SVM.save("test.volkan"); //eğittiğimiz modeli kaydedip daha sonra kullanabiliriz.
for(int i = 0; i < 5; i++ )
{
double r;
CvMat sample;
cvGetRow(&trainData, &sample, i );
r = SVM.predict( &sample ); //predict edip sonuçları kontrol edelim.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment