1. 余弦相似度
from PIL import Image
from numpy import average, dot, linalg
# 对图片进行统一化处理
def get_thum(img_path, size=(64, 64), greyscale=False):
img = Image.open(img_path)
# 对图像大小重置, Image.ANTIALIAS为高质量的
img = img.resize(size, Image.ANTIALIAS)
if greyscale:
# 将图片转换为L模式,其为灰度图,其每个像素用8个bit表示
img = img.convert('L')
return img
# 计算图片的余弦距离
def image_cosin_similarity(img1_path, img2_path):
img1 = get_thum(img1_path)
img2 = get_thum(img2_path)
imgs = [img1, img2]
vectors = []
norms = []
for img in imgs:
vector = []
for pixel_tuple in img.getdata():
vector.append(average(pixel_tuple))
vectors.append(vector)
# linalg=linear(线性)+algebra(代数),norm则表示范数
norms.append(linalg.norm(vector, 2))
# dot返回的是点积,对二维数组(矩阵)进行计算