我需要获取两个图像的相似度得分,我正在使用SIFT比较方法,我已经按照教程特征匹配所述进行了操作,但是缺少得分计算。
下面是我用于SIFT比较的代码:
但是当我将它添加到比较代码中时,我会收到以下错误提示:
谢谢你。
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = cv2.imread('C:/Users/Akhou/Desktop/ALTRAN Tech.jpg',0) # queryImage
img2 = cv2.imread('rect.png',0) # trainImage
# Initiate SIFT detector
sift=cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# FLANN parameters
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)
# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]
# ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
if m.distance < 0.7*n.distance:
matchesMask[i]=[1,0]
draw_params = dict(matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = 0)
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)
plt.imshow(img3,),plt.show()
我也找到了一个计算分数的代码部分:
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
a=len(good)
print(a)
percent=(a*100)/kp1
print("{} % similarity".format(percent))
if percent >= 75.00:
print('Match Found')
break;
但是当我将它添加到比较代码中时,我会收到以下错误提示:
percent=(a*100)/kp1
TypeError: unsupported operand type(s) for /: 'int' and 'list
谢谢你。
谢谢你
(a*100)
除以kp1
,其中kp1
是一个列表而不是有效的数值。 - Nishant Nawarkhedepercent=(a*100)/len(kp1)
,它可以工作,但我认为这没有意义! - newbie