Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

NormalBayesCLassifier::predict error

I have trained a NormalBayesClassifier and saved it as yaml. The FeatureDetector used was PyramidGFTT, the DescriptorExtractor used was BRISK and the matcher was BruteForce. I have used a BOWImgDescriptorExtractor based on the mentioned types of DescriptorsExtractor and matcher. I have also used a BOWKMeansTrainer(750, cv::TermCriteria(CV_TERMCRIT_ITER, 10, 0.001), 3, KMEANS_PP_CENTERS) for training. I save the classifier trained.

Then I load it and use the same detector, extractor and matcher, it works fine, but when I do classifier->predict(descriptors, &result); It crashes saying:

OpenCV Error: Bad argument (The input samples must be 32f matrix with the number of columns = var_all) in predict, file /home/me/opencv/modules/ml/src/nbayes.cpp, line 384
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/me/opencv/modules/ml/src/nbayes.cpp:384: error: (-5) The input samples must be 32f matrix with the number of columns = var_all in function predict

In fact I use Ptr< NormalBayesCLassifier >, that is why I use -> instead of .. If I do not use Ptr, it gives me the same error. I have tried to convert the descriptors to CV_32FC1, but the same error is thrown.

How to predict what class an image is using NormalBayesClassifier loaded from a file (yaml)?