我是openCV SVM的新手。我在Xcode 7.0,openCV 3.0中运行,下面是我的代码
MatMat labels(0,1,CV_32FC1);
//Mat labels(0,1,CV_32S); //I also try this when i saw some posting, But error too.
...
Mat samples_32f; samples.convertTo(samples_32f, CV_32F);
//Mat samples_32f; samples.convertTo(samples_32f, CV_32FC1); //tried!
Ptr<SVM> classifier = SVM::create();
classifier->SVM::train(samples_32f, 0, labels); <- Here the Error
OpenCV错误:错误的参数(在分类问题的情况下,响应必须是分类的;要么在创建TrainData时指定varType,要么传递整数响应)。
当我搜索某些解决方案时,错误消息似乎来自labels
,它定义的不是整数值。所以我尝试更改为Mat labels(0,1,CV_32S)
,但问题错误仍然相同。
所以我不知道代码出了什么问题......任何人都可以帮忙吗?
答案 0 :(得分:0)
错误是因为标签不包含定义为0
行1
列的任何值。因此,确保labels
持有SVM培训的行数记录是正确的。
我的解决方案:
Mat labels(0,1,CV_32S);
/*
for loop to use pushback added value into lables
{...}
*/
/*
or
define another Mat labeled(labels.rows, 1, CV_32S); after the for loop
and use it in the SVM.train
*/
Mat samples_32f; samples.convertTo(samples_32f, CV_32F);
Ptr<SVM> classifier = SVM::create();
classifier->SVM::train(samples_32f, 0, labels); <-change the labels names if you define new labels after the for loop.
谢谢,这就是我可以分享的内容。