大家好,希望你们一切都好。我正在实现一个系统,该系统可以从 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< DMatch > 匹配;)具有对象(要检测的对象)的图像帧为零。所以我无法执行 findhomography。(但是代码努力寻找匹配)但是当我运行drawmatches时,它会在给定帧上绘制检测到的对象上的点。当我用 surf 运行相同的算法时,BRISK 他们给出的匹配大小 >0,然后我可以用它执行查找单应性并继续。
你能告诉我为什么我的 FREAK 得到零匹配吗?我能做些什么来避免这种情况并执行查找单应性?该代码适用于 surf 和 BRISK(但它们也会给出错误的结果,但我可以处理它们)提前谢谢!
注意:-我认为我的问题对您来说更清楚。请让我知道,我会根据您的需要进行编辑。