2015-08-23 67 views
0

我正在努力为OpenCV3中的图像分类训练svm分类器编写实用程序。但是在训练过程中我有浮点异常(core dumped)错误。如何形成支持向量机的训练数据OpenCV3

我的主要问题是我不知道,我不确定如何形成训练数据来喂养svm.train方法。

这是形成训练数据的代码。

TrainingDataType SVMTrainer::prepareDataForTraining() { 

    cv::Mat trainingData(m_numOfAllImages, 28*28, CV_32FC1); 
    cv::Mat trainingLabels(m_numOfAllImages, 1, CV_32FC1); 

    int rowNum = 0; 


    // Item is pair of classId (int) and vector of images. 
    for(auto item : m_data){ 
     int classId = item.first; 
     for(auto item1 : item.second){ 
      Mat temp = item1.reshape(1,1); 
      temp.copyTo(trainingData.row(rowNum)); 

      trainingLabels.at<float>(rowNum) = item.first; 
      ++rowNum; 
     } 
    } 

    return cv::ml::TrainData::create(trainingData, 
            cv::ml::SampleTypes::ROW_SAMPLE, 
            trainingLabels) ; 

} 

void SVMTrainer::train(std::string& configPath){ 
    // Read and store images in memory. 
    formClassifierData(configPath); 

    m_classifier = cv::ml::SVM::create(); 
    // Training parameters: 
    m_classifier->setType(cv::ml::SVM::C_SVC); 
    m_classifier->setKernel(cv::ml::SVM::POLY); 
    m_classifier->setGamma(3); 
    m_classifier->setDegree(3); 

    TrainingDataType trainData = prepareDataForTraining(); 

    m_classifier->trainAuto(trainData); 

} 

所有图像都已经与尺寸28 * 28,黑白色&准备。

而且列车实际调用这个方法

有人能告诉我什么,我做错了。

谢谢,

回答

1

它很简单。将标签格式更改为CV_32SC1。它肯定会解决您在opencv 3.0毫升的问题。

+0

仍然崩溃... – Steva

相关问题