天天看点

python自动化办公:批量去除电脑中的重复图像

作者:人工智能取经人

在数字化时代,我们经常会遇到图像文件大量堆积的情况,其中不乏重复的图片。这些重复的图片不仅占用了宝贵的存储空间,还使得文件管理和备份变得繁琐。为了解决这个问题,我们可以利用Python编写一个脚本来自动检测和删除重复的图像文件。

准备工作

在开始编写代码之前,我们需要确保已经安装了Python环境,并安装了一个用于比较图像相似度的库,如imagehash和Pillow(PIL的分支)。这两个库可以帮助我们生成图像的哈希值,并基于这些哈希值来比较图像的相似性。

你可以使用pip来安装这两个库:

pip install imagehash pillow           

编写代码

下面是一个简单的Python脚本,用于查找并删除重复的图像文件:

import os  
import imagehash  
from PIL import Image  
from itertools import combinations  
  
def image_hash(file_path):  
    hash_object = imagehash.average_hash(Image.open(file_path))  
    return hash_object  
  
def find_duplicate_images(directory):  
    images = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f)) and f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]  
    hashes = {f: image_hash(os.path.join(directory, f)) for f in images}  
      
    duplicates = []  
    for img1, img2 in combinations(images, 2):  
        if hashes[img1] - hashes[img2] < 5:  # 设定一个阈值来判断是否相似  
            duplicates.append((img1, img2))  
      
    return duplicates  
  
def remove_duplicates(directory, duplicates):  
    for img1, img2 in duplicates:  
        # 假设我们保留第一个文件,删除第二个文件  
        os.remove(os.path.join(directory, img2))  
        print(f"Removed duplicate: {img2}")  
  
# 使用示例  
directory = 'path/to/your/image/directory'  # 替换为你的图像目录  
duplicates = find_duplicate_images(directory)  
remove_duplicates(directory, duplicates)           

注意:这个脚本使用了简单的平均哈希算法来比较图像,并设定了一个阈值(在这个例子中是5)来判断两个哈希值是否足够接近,从而认为图像是相似的。然而,这种方法的准确性可能因图像质量和内容的复杂性而有所不同。你可能需要根据你的具体需求来调整这个阈值。

此外,这个脚本会删除所有相似的图像中的第二个图像,保留第一个图像。如果你想要更复杂的逻辑(例如,只删除完全相同的图像,或者基于某种策略来选择要保留的图像),你需要在remove_duplicates函数中添加更多的逻辑。

最后,这个脚本并没有提供备份或撤销删除的选项,因此请确保在运行脚本之前备份你的图像文件,以防止误删除重要文件。

代码实战

python自动化办公:批量去除电脑中的重复图像

我有一批图片,每张图片都被备份了两次,利用以上代码识别出重复图片

python自动化办公:批量去除电脑中的重复图像

删除图片后,所有的图片都只剩下一张原图

python自动化办公:批量去除电脑中的重复图像

继续阅读