2016-03-22 2 views
0

Я хочу получить минимальный рабочий пример реализации программы FABMAP OpenCV. Чтобы туда добраться, я скопировал код с this file. Я использую другую версию OpenCV, чем поставщик образца кода (в моем случае это 2.4.8) и должны были изменить первоначальную линиюОшибка сегментации в OpenCV MWE

Ptr<DescriptorExtractor> extractor = 
    new SurfDescriptorExtractor(1000, 4, 2, false, true); 

в

Ptr<DescriptorExtractor> extractor = 
    DescriptorExtractor::create("SURF"); 

К сожалению, сейчас я получаю ошибка сегментации, которую я не могу решить (я прокомментировал строку). Кроме того, я обнаружил, что extractor является нулевым указателем, тогда как matcher - нет. Может ли быть, что nullpointer extractor вызывает проблемы? Как я могу решить эту ситуацию?

Я использую Ubuntu 14.04 и g ++ для компиляции (C++ 11).

Чтобы воспроизвести это, вам необходимо скачать this directory. Мой минимальный (почти) рабочий пример:

#include "opencv2/opencv.hpp" 
#include "opencv2/features2d/features2d.hpp" 

using namespace cv; 
using namespace std; 

int main(int argc, char * argv[]) { 

    string dataDir = "fabmap_data/"; 

    FileStorage fs; 

    //load/generate vocabulary 
    fs.open(dataDir + string("vocab_small.yml"), FileStorage::READ); 
    Mat vocab; 
    fs["Vocabulary"] >> vocab; 
    fs.release(); 

    //generate test data 
    Ptr<FeatureDetector> detector = 
     new DynamicAdaptedFeatureDetector(
     AdjusterAdapter::create("STAR"), 130, 150, 5); 
    Ptr<DescriptorExtractor> extractor = 
     DescriptorExtractor::create("SURF"); // extractor seems to be a nullpointer (addres:: 0x0) 
    Ptr<DescriptorMatcher> matcher = 
     DescriptorMatcher::create("FlannBased"); 

    BOWImgDescriptorExtractor bide(extractor, matcher); 
    bide.setVocabulary(vocab); 

    string imageName = "stlucia_test_small0000.jpeg"; 

    Mat frame; 
    Mat bow; 
    vector<KeyPoint> kpts; 

    frame = imread(dataDir + imageName); 
    detector->detect(frame, kpts); 
    bide.compute(frame, kpts, bow); // I get a segmentation fault at this line! 

    return 0; 
} 

ответ

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