0

首先,对不起标题,我不知道如何命名。

现在,我正在使用 openCV 来比较 2 张图像。

代码取自这里: https ://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html#flann-based-matcher

所以在我的代码中我有:

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(image, None)

这是为了计算描述符/关键点。

对于 Flann 匹配器,我有以下内容:

FLANN_INDEX_LSH = 6
index_params = dict(algorithm=FLANN_INDEX_LSH, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)

这是第二张图片的相同代码:

kp2, des2 = orb.detectAndCompute(image2, None)
matches = flann.knnMatch(des1, des2, k=2)

而且我还在一些资料中看到这是如何实现劳氏比率测试的:

good = []
for m_n in matches:
    if len(m_n) != 2:
        continue
    (m, n) = m_n
    if m.distance < acc * n.distance:
        good.append(m)

后来我这样做了两个图像:

matches = [item for sublist in matches for item in sublist] 
#This is needed because matches is a list of lists.
img3 = cv2.drawMatches(image, kp1, target, kp2, matches[:20], None, flags=2)
img4 = cv2.drawMatches(image, kp1, target, kp2, good[:20], None, flags=2)

结果我得到了这张图片:

在此处输入图像描述

上半部分是matches有的,另一半是good

你能解释一下两者之间有什么区别吗?我到处看了看,但我仍然不知道我在做什么来构建good,并且很遗憾只是复制粘贴一些代码而不知道它是什么。

4

0 回答 0