用Python实现通过哈希算法检测图片重复的教程

  • Post category:Python

下面是详细讲解“用Python实现通过哈希算法检测图片重复的教程”,包含两个示例说明。

通过哈希算法检测图片重复

哈希算法是种将任意长度的消息压缩到某一固定长度的算法在图片处理中,我们可以使用哈希算法来检测图片是否重。具体来说,我们可以将图片转换为哈希值,然后比较哈希值来判断图片是否相同。

用Python实现通过哈希算法检测图片重复的教程

下面是一个示代码,用于实现通过哈希算法检测图片重复:

import os
import hashlib
from PIL import Image

def get_image_hash(image_path):
    with open(image_path, 'rb') f:
        image = Image.open(f)
        image_hash = hashlib.md5(image.tobytes()).hexdigest()
        return image_hash

def find_duplicate_images(folder_path):
    image_hashes = {}
    duplicates = []

    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith('.jpg') or file.endswith('.png'):
                image_path = os.path.join(root, file)
                image_hash = get_image_hash(image_path)

                if image_hash in image_hashes:
                    duplicates.append((image_path, image_hashes[image_hash]))
                else:
                    image_hashes[image_hash] = image_path

    return duplicates

这个代码定义了两个函数:get_image_hash和find_duplicate_images。get_image_hash函数用于计算图片的哈希值。它打开图片文件,将其转换为字节流,然后使用MD5哈希算法计算哈希值。find_duplicate_images函数用于查找文件夹中的重复图片。它遍历文件夹中的所有图片文件,计算每个图片的哈希值,并将哈希值存储在字典中。如果两个图片的哈希值相同,则它们被认为是重复的。

示例1:检测单个图片是否重复

让我们使用上面的代码检测单个图片是否重复。我们将以下代码:

image_path = 'test.jpg'
image_hash = get_image_hash(image_path)
print(image_hash)

这个代码使用get_image_hash函数计算图片的哈希值。我们将图片路径作为参数传递给函数,并打印输出结果。

示例2:检测文件夹中的重复图片

让我们使用上面的代码检测文件夹中的重复图片。我们将以下代码:

folder_path = 'images'
duplicates = find_duplicate_images(folder_path)

if duplicates:
    for duplicate in duplicates:
        print(f'{duplicate[0]} is a duplicate of {duplicate[1]}')
else:
    print('No duplicates found')

这个代码使用find_duplicate_images函数查找文件夹中的重复图片。我们将文件夹路径作为参数传递给函数,并打印输出结果。如果有重复图片,则打印输出每个重复图片的路径。

希望这攻略帮助你理解如何使用Python实现通过哈希算法检测图片重复。