方法一:用structural_similarity
from skimage.metrics import structural_similarity
current_pic = cv2.cvtColor(cv2.imread('test4.jpg'), cv2.COLOR_BGR2GRAY)
current_pic = cv2.resize(current_pic, dsize=(400, 400))
score, _ = structural_similarity(current_pic, brand_pic, full=True)
方法二:将图片缩小到10*10像素,根据每个像素点的值判断相似度。
速度1秒钟20个图片
from PIL import Image
def hash_img(img): # 计算图片的特征序列
a = [] # 存储图片的像素
feature_list = [] # 特征序列
img = img.resize((10, 10)) # 图片缩放
for y in range(img.height):
b = []
for x in range(img.width):
pos = x, y
color_array = img.getpixel(pos) # 获得像素
if img.mode == 'P': # 单通道
color = color_array
else:
color = sum(color_array) / 3 # 灰度化
b.append(int(color))
a.append(b)
for y in range(img.height):
avg = sum(a[y]) / len(a[y]) # 计算每一行的像素平均值
for x in range(img.width):
if a[y][x] >= avg: # 生成特征序列,如果此点像素大于平均值则为1,反之为0
feature_list.append(1)
else:
feature_list.append(0)
return feature_list
def similar(hash1, hash2): # 求相似度
same_count = sum(1 for a, b in zip(hash1, hash2) if a == b)
return same_count / len(hash1)