c++ - OpenCV MWE 中的段错误

标签 c++ opencv

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

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;
}

最佳答案

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

关于c++ - OpenCV MWE 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36162598/

相关文章:

c++ - 在已在共享库中实现的可执行文件中实现静态方法是否安全?

c++ - MATLAB 并行工具箱,remoteParallelFunction : RUNTIME_ERROR during function evaluation

c++ - 错误变量 protected

python-3.x - 有没有办法创建我自己的图像批处理?

python - Python OpenCV在元组中追加匹配的中心x,y坐标

c++ - 在函数中返回 2 个值

c++ - 求负数的下一个 2 的幂

opencv - 如何在项目中使用本地jar?

javascript - 如何解决 TypeError : cv. Mat is not a constructor opencv.js?

c++ - 丢失和再次找到时的对象跟踪