OpenCV MWE 中的分段错误

Segmentation fault in OpenCV MWE

本文关键字:分段 错误 MWE OpenCV      更新时间:2023-10-16

我想得到一个OpenCV的FABMAP实现的最小工作示例。为了到达那里,我从这个文件中复制了代码。我使用与示例代码提供者不同的 OpenCV 版本(在我的例子中是 2.4.8),并且不得不更改原始行

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

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

不幸的是,现在我遇到了一个无法解决的分段错误(我评论了该行)。此外,我发现extractor是一个空指针,而matcher不是。会不会是空指针extractor造成了麻烦?如何解决这种情况?

我正在使用 Ubuntu 14.04 和 g++ 进行编译(c++11)。

要重现此目录,您必须下载此目录。我的最小(几乎)工作示例:

#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;
}
这是一个

错误,影响从2.4.4到2.4.9的版本:http://code.opencv.org/issues/2280