大家好,希望你做得好。我正在实现一个系统,可以在opencv 2.4.8中检测给定图像帧中的对象。目前我正在处理FREAK算法,因为它是免费的。正如在教程和opencv文档中提到的,我创建了fastfeaturedetector和FREAK类的对象
FastFeatureDetector detector(30);
FREAK extractor;
从这里开始代码与opencv示例http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html最相似 而不是FLANN,我使用了Bruteforce
BruteForceMatcher<Hamming> matcher;
对于对象和实时图像帧我找到关键点和描述符
detector.detect(frame,keypoints_frame);
descriptors_frame.convertTo(descriptors_frame,CV_32F);
extractor.compute(frame, keypoints_frame, descriptors_frame);
然后我使用“匹配”匹配描述符 -
matcher.match( descriptors_object, descriptors_frame, matches);
当我检查匹配的大小(定义为std :: vector&lt; DMatch&gt;匹配;)对于具有对象(要检测的对象)的图像帧,它是零。因此我无法执行查找。 (但代码可以找到匹配) 但是当我运行drawmatches时,它会在给定帧上绘制检测到的对象上的点。当我使用冲浪运行相同的算法时,BRISK会给出匹配大小> 0,然后我可以用它执行查找单应性并继续。
你能否告诉我为什么我的FREAK零比赛? 我该怎么做才能避免这种情况并执行查找单应性? 该代码适用于surf和BRISK(但它们也会给出错误的结果,但我可以处理它们) 在此先感谢!!
注意: - 我认为我的问题更清楚了。请告诉我,我会根据您的需要进行编辑。