Поэтому я пытаюсь создать SVM для классификации изображений и успешно обучаю SVM. Теперь следующим шагом является использование функции предикторов для получения результатов. Однако, когда я склонен сделать это, появляется ошибка утверждения, которая выглядит следующим образом:
OpenCV Error: Assertion failed (samples.cols == var_count && samples.type() == CV_32F) in predict
Насколько я понимаю, это связано с тем, что моя матрица выборки, которая передается в качестве аргумента функции предсказания, не имеет соответствующего размера.
Я сделал svm-> getVarCount (), чтобы узнать, что число ожидаемых переменных равно 2. Это означает, что число столбцов в моей матрице, которое должно быть передано, должно быть 2. Однако я не могу завершить этот последний шаг с помощью следующего кода, который я написал:
Ptr<SVM> svm = SVM::create();
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::POLY);
svm->setGamma(3);
svm->setDegree(3);
svm->train(trainDataFormatted);
svm->save(saveFile);
Mat sampleMat_temp = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
Mat sampleMat;
sampleMat_temp.convertTo(sampleMat,CV_32F);
//Throws an error here because of the mismatch in dimensions
//float response = svm->predict(sampleMat_temp);
std::cout << "Result:" << svm->getVarCount() << std::endl;
std::cout << "Cols:" << sampleMat.cols;
svm->predict(sampleMat);
Здесь переменная svm была обучена. Я попытался с помощью reshape на sampleMat, но безрезультатно. Любая помощь приветствуется. Спасибо!
Задача ещё не решена.
Других решений пока нет …