2015-03-08 5 views
1

J'ai une application Android qui utilise la méthode BOW + SVM pour la détection d'objets. J'utilise DynamicSURF pour la détection de caractéristiques, OpponentSURF pour l'extraction de descripteurs et Matcher FlannBased. Je reçois le cadre au format RGBA donc je suis en train de le convertir en BGR.Erreur OpenCV: format non pris en charge ou combinaison de formats (type = 16)

Le problème survient lorsque j'essaie de calculer des fonctionnalités. L'erreur suivante est donnée:

03-08 23:31:07.965: E/cv::error()(1578): OpenCV Error: Unsupported format or combination of formats (type=16 
03-08 23:31:07.965: E/cv::error()(1578):) in void cv::flann::buildIndex_(void*&, const cv::Mat&, const cv::flann::IndexParams&, const Distance&) [with Distance = cvflann::L2<float>, IndexType = cvflann::Index<cvflann::L2<float> >], file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/flann/src/miniflann.cpp, line 315 

Voici mon code:

Mat matBGR; 
    cvtColor(matRGBA, matBGR, CV_RGBA2BGR); 

    const Ptr<FeatureDetector> detector = FeatureDetector::create("DynamicSURF"); 
    const Ptr<DescriptorExtractor> descriptors = DescriptorExtractor::create("OpponentSURF"); 
    const Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased"); 
    BOWImgDescriptorExtractor bowDE(descriptors, matcher); 

    FileStorage fileStorage(dictionaryPathString + dictionaryNameString, FileStorage::READ); 

    Mat dictionary; 

    fileStorage["dictionary"] >> dictionary; 
    fileStorage.release(); 
    bowDE.setVocabulary(dictionary); 

    Mat features; 
    vector<KeyPoint> keypoints; 

    detector->detect(matBGR, keypoints); 
    KeyPointsFilter::retainBest(keypoints, 1700); 
    bowDE.compute(matBGR, keypoints, features); 

Avez-vous une idée de ce qui cause ce problème? J'ai cherché des solutions mais je n'ai pas trouvé de solution.

Répondre

1

Erreur stupide .. Il s'avère que j'utilisais un mauvais fichier pour le dictionnaire BOW. J'ai mis le bon fichier et l'erreur est partie. Vérifiez toujours pour de telles choses, cela peut vous faire économiser des heures!