OpenCV的支援向量機SVM的程式

2021-06-19 18:42:14 字數 3410 閱讀 1229

#include #include #include #include #include #include #include using namespace std;

#define width 28

#define height 30

int main( /*int argc, char** argv*/ )

else

}}svm_data.close();

cvmat *data_mat, *res_mat;

int nimgnum = nline / 2;

data_mat = cvcreatemat( nimgnum, width * height, cv_32fc1 );

cvsetzero( data_mat );

res_mat = cvcreatemat( nimgnum, 1, cv_32fc1 );

cvsetzero( res_mat );

iplimage *srcimg, *sampleimg;

float b;

dword n;

for( string::size_type i = 0; i != img_path.size(); i++ )

}cvmset( res_mat, i, 0, img_catg[i] );

cout<<" end processing "ifstream img_tst( "svm_test.txt" );

while( img_tst )

}img_tst.close();

cvmat *tst_mat = cvcreatemat( 1, width*height, cv_32fc1 );

char line[512];

ofstream predict_txt( "svm_predict.txt" );

for( string::size_type j = 0; j != img_tst_path.size(); j++ )

}int ret = svm.predict( tst_mat );

sprintf( line, "%s %d\r\n", img_tst_path[j].c_str(), ret );

predict_txt<

將訓練完的svm的資料都儲存到了乙個svm_data.xml檔案中,部分內容如下:

<?xml version="1.0"?>

c_svc

rbf0.0900000000000000

10.1.1920928955078125e-007

2147483647

84084021

2i0 126

<_>

0.37647060 0.38039216 0.38431373 0.38823530 0.39215687 0.39607844

0.40000001 0.40392157 0.40784314 0.41176471 0.41568628 0.41960785

0.42352942 0.42745098 0.43137255 0.43529412 0.43921569 0.44313726

0.44705883 0.45098040 0.45490196 0.45882353 0.46274510 0.46666667

0.47058824 0.47450981 0.47843137 0.48235294 0.48627451 0.49019608

0.49411765 0.49803922 0.50196081 0.50588238 0.50980395 0.51372552

0.51764709 0.52156866 0.52549022 0.52941179

看起來數值都比較正常,可是用predict方法的時候,得到的結果卻讓人失望,鬼知道為什麼。

svm_data.txt中內容如下: 0

g:/program/pjsvm/face/1.png

0g:/program/pjsvm/face/2.png

0g:/program/pjsvm/face/3.png

0g:/program/pjsvm/face/4.png

0g:/program/pjsvm/face/5.png

0g:/program/pjsvm/face/6.png

0g:/program/pjsvm/face/7.png

0g:/program/pjsvm/face/8.png

0g:/program/pjsvm/face/9.png

0g:/program/pjsvm/face/10.png

0g:/program/pjsvm/face/11.png

0g:/program/pjsvm/face/12.png

0g:/program/pjsvm/face/13.png

0g:/program/pjsvm/face/14.png

0g:/program/pjsvm/face/15.png

1g:/program/pjsvm/face/16.png

1g:/program/pjsvm/face/17.png

1g:/program/pjsvm/face/18.png

1g:/program/pjsvm/face/19.png

1g:/program/pjsvm/face/20.png

1g:/program/pjsvm/face/21.png

1g:/program/pjsvm/face/22.png

1g:/program/pjsvm/face/23.png

1g:/program/pjsvm/face/24.png

1g:/program/pjsvm/face/25.png

1g:/program/pjsvm/face/26.png

1g:/program/pjsvm/face/27.png

1g:/program/pjsvm/face/28.png

1g:/program/pjsvm/face/29.png

1g:/program/pjsvm/face/30.png

svm_test.txt中內容如下:

g:/program/pjsvm/try_face/5.png

g:/program/pjsvm/try_face/9.png

g:/program/pjsvm/try_face/11.png

g:/program/pjsvm/try_face/15.png

g:/program/pjsvm/try_face/2.png

g:/program/pjsvm/try_face/30.png

g:/program/pjsvm/try_face/17.png

g:/program/pjsvm/try_face/21.png

g:/program/pjsvm/try_face/24.png

g:/program/pjsvm/try_face/27.png

OpenCV的支援向量機SVM的程式

步驟 1,生成隨機的點,並按一定的空間分布將其歸類 2,建立svm並利用隨機點樣本進行訓練 3,將整個空間按svm分類結果進行劃分,並顯示支援向量 cpp view plain copy include stdafx.h include void drawcross mat img,point ce...

支援向量機(SVM)

簡介 術語 支援向量機 svm 是乙個類分類器,正式的定義是乙個能夠將不同類樣本在樣本空間分隔的超平面。換句話說,給定一些標記 label 好的訓練樣本 監督式學習 svm演算法輸出乙個最優化的分隔超平面。首先我們假定有乙個未知的欲分類的集合,可以進行分割,但是我們不知道分割的函式 超平面,也叫真實...

支援向量機SVM

支援向量機svm support vector machine 是機器學習領域的乙個有監督的學習模型。一 簡介 支援向量機建立在統計學習理論的基礎之上。統計學習理論 statistical learning theory簡稱slt 是一種處理小樣本的統計理論 為研究有限樣本情況下的統計模式識別和更廣...