import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
from PIL import Image
print(os.getcwd())
os.chdir(r"D:\python\Ads2021")
#均值哈希算法
def aHash(img):
#缩放为8*8
plt.imshow(img)
plt.axis('off')
plt.show()
img=cv2.resize(img,(8,8))
plt.imshow(img)
plt.axis('off')
plt.show()
#转换为灰度图
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#s为像素和,初值为0;hash_str为hash值,初值为"
s=0
hash_str=""
#遍历累加求像素和
for i in range(8):
for j in range(8):
s=s+gray[i,j]
#求平均灰度
avg=s/64
#灰度大于平均值为1相反为0生成图片的hash值
for i in range(8):
for j in range(8):
if gray[i,j]>avg:
hash_str=hash_str+'1'
else:
hash_str=hash_str+'0'
return hash_str
#Hash值对比
def cmpHash(hash1,hash2):
n=0
print(hash1)
print(hash2)
#hash长度不同则返回-1代表传参出错
if len(hash1)!=len(hash2):
return-1
#遍历判断
for i in range(len(hash1)):
#不相等则n计数+1,n最终为相似度
if hash1[i]!=hash2[i]:
n=n+1
return n
img1 = cv2.imread('./pic/image0.jpg')
img2 = cv2.imread('./pic/image1.jpg')
hash1 = aHash(img1)
hash2 = aHash(img2)
n = cmpHash(hash1, hash2)
print('均值哈希算法相似度:', n)