我想获得 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/