我正在尝试提取不同的点描述符(SIFT、SURF、ORB、BRIEF,...)来构建视觉词袋。问题似乎是我使用的图像非常小: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 文档 http://docs.opencv.org/2.4.3/modules/features2d/doc/feature_detection_and_description.html#orb.
此外,如果人们使用密集点提取器,他们应该意识到,在描述符计算过程之后,他们拥有的关键点可能少于关键点提取器生成的关键点。描述符计算删除任何无法获取数据的关键点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)