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;
}
まあ。何時間も無駄にした...ありがとう! – MrX