imagehash图片去重:保留图片文件名
简介
在日常工作中,我们可能需要管理大量图片,这些图片中可能存在图像相同文件名不同的情况。手动删除这些重复的图片既费时又费力。为了解决这个问题,我们可以编写一个Python脚本来自动化这个过程。
准备工作
在开始之前,请确保您已经安装了Python环境,并且安装了以下库:
Pillow
:用于图像处理。imagehash
:用于计算图像的哈希值。
您可以通过以下命令安装这些库:
pip install Pillow imagehash
代码解析
from pathlib import Path
from PIL import Image
from imagehash import phashdef remove_duplicate_images(dir_path):"""图片去重:param dir_path:文件夹路径"""hashes = set()for file in Path(dir_path).iterdir():# 计算图片哈希值# 打开非图片文件会报错try:img_hash = str(phash(Image.open(file)))except:print(f'不是图片文件:{file}')continue# 若图片哈希值已经在哈希集合中,说明已经存在相同图片,删除当前图片文件即可if img_hash in hashes:file.unlink()print(f'删除相同图片:{file}')else:# 将当前图片哈希值添加到哈希集合中hashes.add(img_hash)
代码流程
-
导入库:导入
Path
用于路径操作,Image
用于图像处理,phash
用于计算图像的感知哈希值。 -
定义函数:定义
remove_duplicate_images
函数,接受一个参数dir_path
,即需要去重的图片文件夹路径。 -
初始化哈希集合:使用
set()
创建一个空集合hashes
,用于存储图片的哈希值。 -
遍历文件夹:使用
Path(dir_path).iterdir()
遍历指定目录下的所有文件。 -
计算哈希值:对于每个文件,尝试使用
Image.open(file)
打开图片,并使用phash
计算其哈希值。如果文件不是图片,会捕获异常并跳过该文件。 -
检查重复:如果当前图片的哈希值已存在于
hashes
集合中,则说明找到了重复的图片,使用file.unlink()
删除该文件,并打印删除信息。否则,将哈希值添加到hashes
集合中。 -
执行函数:直接调用
remove_duplicate_images
函数,并传入需要去重的图片文件夹路径。