如何在OpenCV Python中将训练后的图像与多个查询图像进行匹配

时间:2017-06-08 22:01:09

标签: python opencv image-processing sift

我想设计一个图像处理程序来检测和匹配手势。我基本上需要做的是将查询图像与多个训练过的图像进行匹配并返回最佳匹配。 下面的代码是两个单手手势的实现。

import cv2 as cv

sift = cv.xfeatures2d.SIFT_create()
bf = cv.BFMatcher()

original_img = cv.imread('./database/bb.jpg', cv.IMREAD_GRAYSCALE)
query_img = cv.imread('./database/b.jpg', cv.IMREAD_GRAYSCALE)

kp1,des1 = sift.detectAndCompute(original_img , None)
kp2, des2 = sift.detectAndCompute(query_img ,None)

matches = bf.knnMatch( des1, des2, k=2 )
good = []

for m,n in matches:
    if m.distance < 0.75 * n.distance:
        good.append ( [m] )

new_img = cv.drawMatchesKnn(original_img, kp1, query_img, kp2, good, None, flags=2)
cv.imshow('matches' , new_img)

k = cv.waitKey(0)
cv.destroyAllWindows()

1 个答案:

答案 0 :(得分:0)

您安装了OpenCV3,代码需要为每场比赛得分。这是链接 Match each pair of images using opencv3。 使用上面的功能,您可以获得每对图像的功能匹配。 当然,您需要评估匹配并为每个匹配分数,然后对它们进行排序。我认为链接Score for each match可以帮助您。