2015-10-23 2 views
0

Im new in openCV SVM. Im работает в Xcode 7.0, OpenCV 3.0 Ниже мой кодOpencv 3.0 Вопросы классификации поездов SVM

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 Error: Bad аргумент (в случае задачи классификации ответы должны быть категоричным, либо указать VARTYPE при создании TrainData, или передавать целые ответы) в поезде.

Когда я просматриваю некоторые решения, сообщение об ошибке появляется из labels, которые определяют не целое значение. Поэтому я попытался изменить на Mat labels(0,1,CV_32S), но ошибка ошибок все тот же.

Так что я понятия не имею, что происходит с кодом. Кто-нибудь может помочь?

ответ

0

Ошибки состоят в том, что этикетки не содержат значения, заданные как 0 строк с 1 cols. Поэтому правильно убедиться, что 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. 

спасибо, это то, что я могу поделиться.

Смежные вопросы