44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
|
|
# 自定义计算两个图片相似度函数
|
|
import cv2
|
|
|
|
|
|
def img_similarity(img1_path, img2_path):
|
|
"""
|
|
:param img1_path: 图片1路径
|
|
:param img2_path: 图片2路径
|
|
:return: 图片相似度
|
|
"""
|
|
try:
|
|
# 读取图片
|
|
img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE)
|
|
img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE)
|
|
|
|
# 初始化ORB检测器
|
|
orb = cv2.ORB_create()
|
|
kp1, des1 = orb.detectAndCompute(img1, None)
|
|
kp2, des2 = orb.detectAndCompute(img2, None)
|
|
|
|
# 提取并计算特征点
|
|
bf = cv2.BFMatcher(cv2.NORM_HAMMING)
|
|
|
|
# knn筛选结果
|
|
matches = bf.knnMatch(des1, trainDescriptors=des2, k=2)
|
|
|
|
# 查看最大匹配点数目
|
|
good = [m for (m, n) in matches if m.distance < 0.75 * n.distance]
|
|
# print(len(good))
|
|
# print(len(matches))
|
|
similary = float(len(good))/len(matches)
|
|
print("(ORB算法)两张图片相似度为:%s" % similary)
|
|
return similary
|
|
|
|
except:
|
|
print('无法计算两张图片相似度')
|
|
return '0'
|
|
if __name__ == '__main__':
|
|
name1='image/AI.jpg'
|
|
name2='image/AI3.jpg'
|
|
# similary 值为0-1之间,1表示相同
|
|
similary = img_similarity(name1, name2)
|
|
print(similary) |