OpenCV SVM"不支持的响应类型"错误

时间:2016-07-30 15:52:40

标签: c++ opencv svm

我使用以下代码训练opencv svm:

cv::SVMParams params;
cv::SVM svm;

params.svm_type = cv::SVM::C_SVC;
params.kernel_type = cv::SVM::LINEAR;
params.term_crit = cv::TermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);

svm.train(trainData, trainLabels, cv::Mat(), cv::Mat(), this->params);

其中trainData是:

std::vector<std::vector<float>> data;
// Do stuff and fill data vector

cv::Mat trainData(data.size(), data.at(0).size(), CV_32FC1);

for (int i = 0; i < data.size(); ++i)
    for (int j = 0; j < data.at(0).size(); ++j)
        trainData.at<float>(i, j) = data.at(i).at(j);

trainLabels是:

std::vector<unsigned> labels;
// Do stuff and fill labels

cv::Mat(labels);

但我有这个错误:

  

C:\ builds \ 2_4_PackSlave-win32-vc12-shared \ opencv \ modules \ ml \ src \ inner_functions.cpp:675:错误:( - 210)函数中不支持的响应类型cvPreprocessCategoricalResponses

这是我以前从未见过的,在我搜索时无法找到。

1 个答案:

答案 0 :(得分:0)

好的,问题实际上非常简单。 cv::SVM仅支持unsigned int类型的标签,将其更改为int并且效果非常好。