我正在使用 openCV for android 来实现徽标检测算法。我现在的目标是在我用安卓相机拍摄的照片中找到一个预定义的标志。
我找不到任何正确的匹配项。考虑到我几乎只使用 openCV 库函数,我认为这很奇怪。
首先我使用 FAST 检测器检测关键点,我的图像大小为 500x500,然后我使用 SURF 来描述这些关键点。与 knn 我要求 2 个最佳匹配,并消除那些 A 比率不小于 0.6(first.distance/second.distance)的。
我得到了大约 10 场比赛,但他们都错了,当我每场比赛(100 多场)都画出来时,他们似乎都错了
我在这里看不到我做错了什么,有没有人有同样的问题,或者知道我做错了什么?
FeatureDetector FAST = FeatureDetector.create(FeatureDetector.FAST);
// extract keypoints
FAST.detect(image1, keypoints);
FAST.detect(image2, logoKeypoints);
DescriptorExtractor SurfExtractor = DescriptorExtractor
.create(DescriptorExtractor.SURF);
Mat descriptors = new Mat();
Mat logoDescriptors = new Mat();
SurfExtractor.compute(image1, keypoints, descriptors);
SurfExtractor.compute(image2, logoKeypoints, logoDescriptors);
List<DMatch> matches = new ArrayList<DMatch>();
matches = knn(descriptors, logoDescriptors);
Scalar blue = new Scalar(0, 0, 255);
Scalar red = new Scalar(255, 0, 0);
Features2d.drawMatches(image2, logoKeypoints, image1, keypoints,
matches, rgbout, blue, red);