Wie trainieren einer SVM mit opencv beruht auf einer Reihe von Bildern?

Ich habe einen Ordner der positive und eine negative Bilder im JPG-format, und ich will trainieren einer SVM, basierend auf den Bildern, ich habe Folgendes getan, aber ich erhalte eine Fehlermeldung:

Mat classes = new Mat();
Mat trainingData = new Mat();

Mat trainingImages = new Mat();
Mat trainingLabels = new Mat();

CvSVM clasificador;

for (File file : new File(path + "positives/").listFiles()) {
        Mat img = Highgui.imread(file.getAbsolutePath());
        img.reshape(1, 1);

        trainingImages.push_back(img);
        trainingLabels.push_back(Mat.ones(new Size(1, 1), CvType.CV_32FC1));
    }

    for (File file : new File(path + "negatives/").listFiles()) {
        Mat img = Highgui.imread(file.getAbsolutePath());
        img.reshape(1, 1);

        trainingImages.push_back(img);
        trainingLabels.push_back(Mat.zeros(new Size(1, 1), CvType.CV_32FC1));
    }

    trainingImages.copyTo(trainingData);
    trainingData.convertTo(trainingData, CvType.CV_32FC1);
    trainingLabels.copyTo(classes);

    CvSVMParams params = new CvSVMParams();
    params.set_kernel_type(CvSVM.LINEAR);

    clasificador = new CvSVM(trainingData, classes, new Mat(), new Mat(), params);

Wenn ich versuche zu laufen, dass ich erhalten:

OpenCV Error: Bad argument (train data must be floating-point matrix) in cvCheckTrainData, file ..\..\..\src\opencv\modules\ml\src\inner_functions.cpp, line 857
Exception in thread "main" CvException [org.opencv.core.CvException: ..\..\..\src\opencv\modules\ml\src\inner_functions.cpp:857: error: (-5) train data must be floating-point matrix in function cvCheckTrainData
]
    at org.opencv.ml.CvSVM.CvSVM_1(Native Method)
    at org.opencv.ml.CvSVM.<init>(CvSVM.java:80)

Ich kann nicht verwalten, zum trainieren der SVM, keine Ahnung? Dank

Ich bin versucht zu klassifizieren Platten basierend auf segmets ich bereits erhalten, mein code basiert auf diesem Beispiel: github.com/MasteringOpenCV/code/blob/master/...
Haben Sie versucht, mit CV_64F? Und hast Du, nur um absolut sicher zu sein, überprüfen Sie, was ist die Art der trainingData kurz bevor es übergeben wird in CvSVM?
danke @morynicz, 'CvType.typeToString(trainingData.type())' zurückkehren würde "CV_32FC3".. Auch versucht, die Umwandlung zu CV_64F mit dem gleichen Fehler

InformationsquelleAutor Joaquín L. Robles | 2013-06-01

Schreibe einen Kommentar