当前位置: 首页 > news >正文

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)

代码流程

  1. 导入库:导入Path用于路径操作,Image用于图像处理,phash用于计算图像的感知哈希值。

  2. 定义函数:定义remove_duplicate_images函数,接受一个参数dir_path,即需要去重的图片文件夹路径。

  3. 初始化哈希集合:使用set()创建一个空集合hashes,用于存储图片的哈希值。

  4. 遍历文件夹:使用Path(dir_path).iterdir()遍历指定目录下的所有文件。

  5. 计算哈希值:对于每个文件,尝试使用Image.open(file)打开图片,并使用phash计算其哈希值。如果文件不是图片,会捕获异常并跳过该文件。

  6. 检查重复:如果当前图片的哈希值已存在于hashes集合中,则说明找到了重复的图片,使用file.unlink()删除该文件,并打印删除信息。否则,将哈希值添加到hashes集合中。

  7. 执行函数:直接调用remove_duplicate_images函数,并传入需要去重的图片文件夹路径。

http://www.lryc.cn/news/484467.html

相关文章:

  • 在Docker环境下为Nginx配置HTTPS
  • vue面试题9|[2024-11-15]
  • 大数据技术在金融风控中的应用
  • 安装一键式重置密码插件(Linux)-CloudResetPwdAgent
  • 如何平滑切换Containerd数据目录
  • 月影和米家大路灯哪个好?书客、月影、米家谁会更胜一筹!
  • instanceof 的模式匹配(二)
  • 【Spring】Bean的作用域和Spring的执行流程
  • 自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术
  • QtWebServer
  • 网络基础概念与应用:深入理解计算机网络
  • <el-select> :remote-method用法
  • CKA认证 | Day3 K8s管理应用生命周期(上)
  • JavaWeb——HTML、CSS
  • springboot如何获取控制层get和Post入参
  • 30 秒!用通义灵码画 SpaceX 星链发射流程图
  • 设计模式之组合模式(营销差异化人群发券,决策树引擎搭建场景)
  • 关于做完 C# 项目的问题总结
  • CSS响应式布局实现1920屏幕1rem等于100px
  • 根据当前浏览器版本,下载或更新驱动文件为对应的版本
  • 【轻量化】YOLOv10 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
  • 人体存在感应器设置时间开启感应人存在开灯,失效
  • 2024年09月CCF-GESP编程能力等级认证Python编程二级真题解析
  • Vuex vs Pinia:新一代Vue状态管理方案对比
  • es查询报错:too_many_buckets_exception
  • outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务
  • 机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)
  • vue跳转传参
  • 初识Linux · 共享内存
  • Illumina测序什么时候会测序到接头序列?