在数字化时代,我们经常会遇到图像文件大量堆积的情况,其中不乏重复的图片。这些重复的图片不仅占用了宝贵的存储空间,还使得文件管理和备份变得繁琐。为了解决这个问题,我们可以利用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函数中添加更多的逻辑。
最后,这个脚本并没有提供备份或撤销删除的选项,因此请确保在运行脚本之前备份你的图像文件,以防止误删除重要文件。
代码实战
我有一批图片,每张图片都被备份了两次,利用以上代码识别出重复图片
删除图片后,所有的图片都只剩下一张原图