2016-05-19 6 views
1

Ich schreibe einen Code für die SVM-Erkennung mit Opencv. Actualy, für die Trainingsdaten, ich habe zwei Matrix (positive und negative Merkmale) Erzeugen von:Operationen mit Vektoren und XML-Datei für SVM auf C++

const size_t N=12; 
std::vector<std::array<int,N>> matrixForTrainingDataPos; 
std::vector<std::array<int,N>> matrixForTrainingDataNeg; 

für jedes Bild mit Merkmalen 12 gefüllt. Ich habe 100 positive Bilder und 140 negative Bilder und dann ist MatrixForTrainingDataPos [100] [12] und MatrixForTrainingDataNeg [140] [12]. Jetzt muß ich verketten, sie zu erhalten:

float trainingData[240][12] = {--------}; 
Mat trainingDataMat(240, 12, CV_32FC1, trainingData); 

ich mit einigem Betrieb als pusk_back versucht, aber ich war nicht erfolgreich. Es ist mir jedoch gelungen, ein Array von 240 Elementen für die Markierung zu erstellen: 100 mit 1 und 140 mit -1 mit zwei für cicle. Der nächste Schritt ist ein TrainingData in XML-Datei zu speichern, so dass das Programm gestartet wird, wenn es keine Datei erstellt, vermeiden Sie die gesamte Verarbeitung von TrainingData, wenn Sie bereits gemacht haben können Sie mir helfen? Tanks!

+0

Können Sie zeigen, wie Sie versucht haben, die Vektoren in das Array zu kopieren und welche Probleme/Fehler Sie damit hatten? – NathanOliver

+0

ich habe 'std :: array findFeatures (Std :: Vektor Segmente) verwendet; Std :: Vektor Segmente = findBuildings (Bild); Std :: Array gefunden = findFeatures (Segmente); matrixForTrainingDataNeg.push_back (found); 'Derselbe Code für matrixForTrainingDataPos. –

Antwort

1
int count = 0; 
for(int i = 0; i < matrixForTrainingDataPos.size(); i++) 
{ 
    for (int j = 0; j < N; j++) 
    { 
     trainingData[count][j] = matrixForTrainingDataPos[i][j]; 
    } 
    count++; 
} 

/* copy negative sample matrix data */ 
+0

'trainingData' wird als' float trainingData [240] [12] 'deklariert, oder wenn die Größe von Trainingsvektoren nicht bekannt ist, kann dies unter Verwendung von' new' geschehen. –

+0

@BeyelerStudios Danke, dass du darauf hingewiesen hast, den Code aktualisiert:) –

0

es funktioniert. Aber der Compiler hat eine Ausnahme für mich zurückgegeben, so dass ich die Variablen i j ohne Vorzeichen deklarieren musste: for (unsigned i=0......

für meine zweite Frage? Wie speichere und lade ich diese Matrix in der XML-Datei beim ersten Durchgang, um zu vermeiden, dass die nächsten Schritte neu berechnet werden?

+1

Wenn Sie wirklich von einer XML-Datei laden und speichern möchten, würde ich vorschlagen, Sie verwenden einige Drittanbieter-Bibliothek (zB tinyxml) oder prüfen, ob opencv selbst bietet, XML-Serialisierungsfunktionen. Andernfalls würde ich vorschlagen, speichern Sie sie einfach in einer CSV-Datei, die einfacher zu implementieren ist. –