Entrene SVM y guárdelo con OpenCV 3.0

Estoy usando Visual Studio 2010, con OpenCV 3.0. Estoy tratando de entrenar un SVM y guardarlo en un archivo, pero tengo problemas.

Mi propósito es extraer las características HOG de algunas imágenes y entrenar un SVM con ellas. Todo parece estar bien, pero cuando trato de guardar el modelo en un archivo xml obtengo el siguiente error:

Excepción no controlada en 0x000007fefd9bb16d (KernelBase.dll) en TrainSVM.exe: Excepción de MICROSOFT C ++: cv :: Excepción en la ubicación de memoria 0x0026e1b0.

Y luego esto se muestra en la consola:

Error de OpenCV: error de análisis (los datos del modelo SVM no son válidos, verifique sv_count, var_ * y d class_count tags) en cv :: ml :: SVMImpl :: write, file C: \ builds \ master_PackSlave-w in64-vc12-shared \ opencv \ modules \ ml \ src \ svm.cpp, línea 2027

El error parece aparecer cuando el SVM no se ha entrenado correctamente, pero no entiendo dónde he fallado, porque la línea

svm-> train (auxResult)

tiene "verdadero" como resultado.

He revisado las imágenes y están cargadas correctamente, ¿alguien podría ayudarme?

Gracias por adelantado.

Aquí está el código:

    String imagesPathPos = "Positivas/*.jpg"; // it has filters, too !
    vector<String> fp;
    glob(imagesPathPos, fp); 
    int tamaño = fp.size();

    std::vector<cv::Point> positions;
    positions.push_back(cv::Point(0,0));
    std::vector<float> descriptor;
    Ptr<TrainData> auxResult;

    for (size_t i=0; i<fp.size(); ++i)
    {
        string nameFile = fp[i];
        Mat img = imread(fp[i]);     
        cv::Mat grayImg;
        cvtColor( img, grayImg, COLOR_BGR2GRAY );           

        hog.compute(grayImg,descriptor,winStride,trainingPadding,positions);

        Mat auxDescriptor = cv::Mat(descriptor);
        Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
        transpose(auxDescriptor, descriptorMat);
        trainingData.push_back(descriptorMat);          
        trainingLabels.push_back(labelPositive);        
    }

    String imagesPathNeg = "Negativas/*.jpg";
    vector<String> fn;
    glob(imagesPathNeg, fn, true); 
    for (size_t i=0; i<fn.size(); i++)
    {
        Mat img = imread(fn[i]);
        cv::Mat grayImg;
        cvtColor( img, grayImg, COLOR_BGR2GRAY );
        hog.compute(grayImg,descriptor,Size(),Size(),positions);

        Mat auxDescriptor = cv::Mat(descriptor);
        Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
        transpose(auxDescriptor, descriptorMat);
        trainingData.push_back(descriptorMat);
        trainingLabels.push_back(labelPositive);
    }

    auxResult = TrainData::create(trainingData, type, trainingLabels);

    svm->train(auxResult);

    svm->save("output.xml");

Respuestas a la pregunta(1)

Su respuesta a la pregunta