opencv中SVM

friend_朋發表於2018-10-01

首先,理解下SVM得輸入格式。SVM的train()函式主要包含兩個輸入資料:訓練資料矩陣以及對應標籤組成的矩陣。其中訓練資料為行向量,標籤矩陣為列向量。舉個例子吧,比如在實驗裡一共用到300張圖片作為訓練資料,其中150張為正例樣本,150張為負例樣本,那麼最終得到的訓練資料矩陣大小應為300行n列,這裡的n代表的就是每一張圖片進行特徵提取(包括下采樣的方法)之後的特徵維數,一般在一兩千左右。對應的,標籤矩陣應為300行1列,儲存的內容為對應行特徵向量所代表的正負標籤,一般去+1和-1,當然取成別的數也可以。

其次需要說明的是就是SVM對於輸入的資料型別是有要求的,即mTrainData(訓練資料矩陣)以及mFlagPosNeg(標籤矩陣)都必須為CV_32FC1型別,因此需要進行型別轉換,而且必須保證轉換完之後數值都不能大於1,這就給我們了兩點啟示:1、不能直接用下采用後的影像畫素作為訓練資料的輸入,需要進行型別的歸一化。2、型別轉換時要使用normlize()函式,保證其數值範圍不大於1,而不能簡單的使用Mat的成員函式coverto,只變型別不變數值範圍。

--------------------- 本文來自 山在嶺就在 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/u013088062/article/details/45113417?utm_source=copy

相關文章