2016-05-10 15 views
0

最近私はSVMを勉強しています。幸いにも私自身のSVM.xmlを試してみる必要があります。 "Master Opencv with pratical project"はTrainSVM.cppファイルを提供していますSVM.xmlファイルには、私は、このSVM.xmlファイルを得ることができるどのようにこのプロジェクトをruningて後に生成TrainSVM.cppファイルとプロジェクトが、何を、構築するコードを以下のように:?最初はSVM.xmlファイルの生成に失敗しました

#include <cv.h> 
#include <highgui.h> 
#include <cvaux.h> 

#include <iostream> 
#include <vector> 

using namespace std; 
using namespace cv; 

int main (int argc, char** argv) 
{ 
    cout << "OpenCV Training SVM Automatic Number Plate Recognition\n"; 
    cout << "\n"; 

    char* path_Plates; 
    char* path_NoPlates; 
    int numPlates; 
    int numNoPlates; 
    int imageWidth=144; 
    int imageHeight=33; 

    //Check if user specify image to process 
    if(argc >= 5) 
    { 
     numPlates= atoi(argv[1]); 
     numNoPlates= atoi(argv[2]); 
     path_Plates= argv[3]; 
     path_NoPlates= argv[4]; 

    }else 
    { 
     cout << "Usage:\n" << argv[0] << " <num Plate Files> <num Non Plate Files> <path to plate folder files> <path to non plate files> \n"; 
     return 0; 
    }   

    Mat classes;//(numPlates+numNoPlates, 1, CV_32FC1); 
    Mat trainingData;//(numPlates+numNoPlates, imageWidth*imageHeight, CV_32FC1 ); 

    Mat trainingImages; 
    vector<int> trainingLabels; 

    for(int i=0; i< numPlates; i++) 
    { 

     stringstream ss(stringstream::in | stringstream::out); 
     ss << path_Plates << i << ".jpg"; 
     Mat img=imread(ss.str(), 0); 
     img= img.reshape(1, 1); 
     trainingImages.push_back(img); 
     trainingLabels.push_back(1); 
    } 

    for(int i=0; i< numNoPlates; i++) 
    { 
     stringstream ss(stringstream::in | stringstream::out); 
     ss << path_NoPlates << i << ".jpg"; 
     Mat img=imread(ss.str(), 0); 
     img= img.reshape(1, 1); 
     trainingImages.push_back(img); 
     trainingLabels.push_back(0); 

    } 

    Mat(trainingImages).copyTo(trainingData); 
    //trainingData = trainingData.reshape(1,trainingData.rows); 
    trainingData.convertTo(trainingData, CV_32FC1); 
    Mat(trainingLabels).copyTo(classes); 

    FileStorage fs("SVM.xml", FileStorage::WRITE); 
    fs << "TrainingData" << trainingData; 
    fs << "classes" << classes; 
    fs.release(); 

    return 0; 
    } 
+0

実行したパラメータは?コンソールに出力がありましたか? – CherryDT

答えて

0

あなたには、いくつかを必要とします 1.jpg ... n.jpgという2つのディレクトリにあります(ディレクトリ名はposnegで、30個のポジティブ画像と30個のネガティブ画像があります)

あなたは私がmentioned book's repo

trainSVM 30 30 ./pos/ ./neg/ 

のようなプログラムを実行する必要があります。サンプルの正と負の画像はありません。私はテストするサンプル画像を準備しました。 here

出力SVM.xmlにはTrainingDataとラベルが含まれています。 SVMを使用するようにトレーニングする必要があります。 look main.cpp

+0

偉大な、それは今働く!ありがとう、男! – Hill

+0

@Hill助けてくれたら、答えを受け入れてください。 – sturkmen

関連する問題