我猜您的目标是在Python中执行图像哈希处理(与经典哈希处理有很大不同,因为图像的字节表示形式取决于格式,分辨率等)。
图像哈希技术之一是 平均哈希 。确保这不是100%准确的,但在大多数情况下都能正常工作。
首先,我们通过减小图像的大小和颜色来简化图像,降低图像的复杂性极大地有助于其他图像之间的比较精度:
缩小尺寸:
img = img.resize((10, 10), Image.ANTIALIAS)
减少颜色:
img = img.convert("L")然后,我们找到图像的平均像素值(这显然是平均哈希的主要组成部分之一):
pixel_data = list(img.getdata())avg_pixel = sum(pixel_data)/len(pixel_data)
最终计算出哈希值,然后将图像中的每个像素与平均像素值进行比较。如果pixel大于或等于平均像素,则得到1,否则为0。然后将这些位转换为以16为底的表示形式:
bits = "".join(['1' if (px >= avg_pixel) else '0' for px in pixel_data])hex_representation = str(hex(int(bits, 2)))[2:][::-1].upper()
如果要将此图像与其他图像进行比较,请执行上述操作,然后找到 平均哈希
图像的十六进制表示形式之间的相似性。您可以使用诸如汉明距离之类的简单算法,也可以使用更复杂的算法,例如Levenshtein距离,Ratcliff
/
Obershelp模式识别(SequenceMatcher),余弦相似度等。



