我坚持这个。
我正在尝试通过 OpenCV 功能 2d 框架进行一些对象分类,但在训练我的 SVM 时遇到了麻烦。
我能够提取词汇表并使用 BowKMeansTrainer 对它们进行聚类,但是在我从训练数据中提取特征以添加到训练器并运行 SVM.train 方法后,我得到以下异常。
OpenCV Error: Bad argument (There is only a single class) in cvPreprocessCategoricalResponses, file /home/tbu/prog/OpenCV-2.4.2/modules/ml/src /inner_functions.cpp, line 729
terminate called after throwing an instance of 'cv::Exception'
what(): /home/tbuchy/prog/OpenCV-2.4.2/modules/ml/src/inner_functions.cpp:729: error: (-5) There is only a single class in function cvPreprocessCategoricalResponses
我已经尝试修改字典大小,使用不同的培训师,确保我的矩阵类型是正确的(尽我所能,对 opencv 来说还是新手)。
有没有人看到这个错误或对如何修复它有任何见解?
我的代码如下所示:
trainingPaths = getFilePaths();
extractTrainingVocab(trainingPaths);
cout<<"Clustering..."<<endl;
Mat dictionary = bowTrainer.cluster();
bowDE.setVocabulary(dictionary);
Mat trainingData(0, dictionarySize, CV_32FC1);
Mat labels(0, 1, CV_32FC1);
extractBOWDescriptor(trainingPaths, trainingData, labels);
//making the classifier
CvSVM classifier;
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
classifier.train(trainingData, labels, Mat(), Mat(), params);