OpenCV(4.1.0) Error: Bad argument (in the case of classification problem the responses must be .....

OpenCV(4.1.0) Error: Bad argument (in the case of classification problem the responses must be categorical; either specify varType when creating TrainData, or pass integer responses) in cv::ml::SVMImpl::train, file c:\build\master_winpack-build-win64-vc15\opencv\modules\ml\src\svm.cpp, line 1629

在VS2019+OpenCV提取图像特征数据后存为CSV文件,读取CSV文件的sample,加载到Mat 矩阵后,输入到SVM分类器后,出现的一个问题。

DEBUG后,是这一句出现了问题:

在百度上找了很久,试过了很多方法,最终从一个小例子中找到解决的方法。

    int labels[5] = { 1.0, -1.0, -1.0, -1.0,1.0 }; //样本数据  
    Mat labelsMat(5, 1, CV_32SC1, labels); //样本标签  
    float trainingData[5][2] = { { 501, 300 },{ 255, 10 },{ 501, 255 },{ 10, 501 },{ 450,500 } }; //Mat结构特征数据
    Mat trainingDataMat(5, 2, CV_32FC1, trainingData); //Mat结构标签  
    cout << trainingData << endl;
    cout << trainingDataMat << endl;
    cout << labelsMat << endl;
    svm->train(trainingDataMat, ml::SampleTypes::ROW_SAMPLE, labelsMat);

从上面的成功运行的例子代码中,发现是输入到train的Mat的数据类型不对。

需要改数据类型。

train.convertTo(train, CV_32FC1);
trainlabel.convertTo(trainlabel, CV_32SC1);

改了之后运行成功了!

心累。。。

你可能感兴趣的:(OpenCV(4.1.0) Error: Bad argument (in the case of classification problem the responses must be .....)