2016-03-22 22 views
0

OpenCVのFABMAP実装の最小限の実例を得たいと考えています。そこに行くために、私はthis fileからコードをコピーしました。私は今、私が得る、サンプルコードの提供者とは異なるOpenCVのバージョンを使用します(私の場合、それは2.4.8である)と、残念ながらOpenCV MWEのセグメンテーションフォルト

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

に元の行

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

を変更する必要がありました私が解決できないセグメンテーション障害(私はその行をコメントしました)。さらに、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; 
} 

答えて

関連する問題