Python 图像哈希

Log*_*gan 8 python hash

我目前正在尝试从 python 中的图像获取哈希值,我已经成功地完成了此操作并且它在某种程度上有效。

但是,我有这个问题:Image1 和 image2 最终具有相同的哈希值,即使它们不同。我需要一种更准确和精确的散列形式。

图像 1 =图像 1

图像2 =图像2

图像的哈希值是:faf0761493939381

我目前正在使用from PIL import Image import imagehash

imagehash.average_hash

代码在这里

import os
from PIL import Image
import imagehash


def checkImage():
    for filename in os.listdir('images//'):
        hashedImage = imagehash.average_hash(Image.open('images//' + filename))
    print(filename, hashedImage)

    for filename in os.listdir('checkimage//'):
        check_image = imagehash.average_hash(Image.open('checkimage//' + filename))
    print(filename, check_image)

    if check_image == hashedImage:
        print("Same image")
    else:
        print("Not the same image")

    print(hashedImage, check_image)


checkImage()
Run Code Online (Sandbox Code Playgroud)

eri*_*384 8

尝试使用hashlib。只需打开文件并执行哈希即可。

\n
import hashlib\n
Run Code Online (Sandbox Code Playgroud)\n
# Simple solution\nwith open("image.extension", "rb") as f:\n    hash = hashlib.sha256(f.read()).hexdigest()\n
Run Code Online (Sandbox Code Playgroud)\n
# General-purpose solution that can process large files\ndef file_hash(file_path):\n    # /sf/ask/1544063391/\n\n    sha256 = hashlib.sha256()\n\n    with open(file_path, "rb") as f:\n        while True:\n            data = f.read(65536) # arbitrary number to reduce RAM usage\n            if not data:\n                break\n            sha256.update(data)\n\n    return sha256.hexdigest()\n
Run Code Online (Sandbox Code Playgroud)\n

感谢 Anton\xc3\xadn Hoskovec 指出应该读取二进制 ( rb),而不是简单读取 (r )!

\n

  • 这不起作用,你需要 `open("image.extension", "rb")` (3认同)