我正在尝试提取不同的点描述符(SIFT、SURF、ORB、BRIEF 等)来构建 Bag of Visual words。问题似乎是我使用的图像非常小:12x60px。 使用密集提取器我能够获得一些关键点,但随后在提取描述符时没有提取任何数据。
代码如下:
vector<KeyPoint> points;
Mat descriptor; // descriptor of the current image
Ptr<DescriptorExtractor> extractor = DescriptorExtractor::create("BRIEF");
Ptr<FeatureDetector> detector(new DenseFeatureDetector(1.f,1,0.1f,6,0,true,false));
image = imread(filename, 0);
roi = Mat(image,Rect(0,0,12,60));
detector->detect(roi,points);
extractor->compute(roi,points,descriptor);
cout << descriptor << endl;
结果是 [](使用 BRIEF 和 ORB)和 SegFault(使用 SURF 和 SIFT)。 有没有人知道如何从 OpenCV 上的小图像中密集提取点描述符? 感谢您的帮助。
最佳答案
的确,我终于设法找到了解决方案。感谢您的帮助。
我现在使用的是带有初始化参数的 Orb 检测器,而不是随机参数,例如:
Ptr<DescriptorExtractor> extractor(new ORB(500, 1.2f, 8, orbSize, 0, 2, ORB::HARRIS_SCORE, orbSize));
在找到我的问题的答案之前,我必须彻底探索 OpenCV 的文档:Orb documentation .
此外,如果人们正在使用密集点提取器,他们应该意识到在描述符计算过程之后,他们的关键点可能少于关键点提取器产生的关键点。描述符计算会删除无法获取数据的任何关键点。
关于opencv - 使用 OpenCV 从小图像中提取点描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19632325/