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

判断两张图片是否完全一致

判断两张图片是否为完全相同的图片

  1. 批量判断尺寸 大小 图像展示内容体是否完全一致的图片
import os
import hashlib
from PIL import Imagedef check_img_repeat(directory):"""批量对图片进行重复性校验是检查一组图像中是否有相同或几乎相同的图像副本。一个简单的方法是计算图像文件的哈希值,并比较这些哈希以查找重复项。哈希值是根据文件内容计算得到的,所以即使文件名不同,相同内容的图像将具有相同的哈希值批量校验图片是否重复@return:"""def file_hash(file_path):with open(file_path, "rb") as f:return hashlib.md5(f.read()).hexdigest()# 存储文件及文件路径的字典hashes = {}# 遍历给定目录下文件for file_name in os.listdir(directory):if file_name.endswith((".png", ".jpg", ".bmp")):file_path = os.path.join(directory, file_name)# 计算文件的hash值img_hash = file_hash(file_path)if img_hash in hashes:print(f"存在相同的照片:{img_hash}{file_path}")else:hashes[img_hash] = file_pathprint(f"图片-{file_path}-未重复")check_img_repeat("XXXX")
  1. 若图像有轻微修改,如尺寸变化,裁剪或者质量差异,MD5哈希值会改变。要检测这类相似图像的重复性,就需要更为复杂的图像处理算法,常见的有感知哈希算法(如pHash)。
def check_img_repeat():"""感知哈希算法(Perceptual Hashing Algorithm,简称pHash)能够生成图像的“指纹”,即使在图像质量变化、缩放或其他形式的处理后,只要内容不变,生成的指纹也会相似。这种算法常用于图像的相似性比较。@param directory:@return:"""def dhash(img, hash_size=8):# 图像转成灰度图img = img.convert('L').resize((hash_size + 1, hash_size),Image.ANTIALIAS,)# 图像转为数组pixels = np.array(img)# 比相邻元素diff = pixels[:, 1:] > pixels[:, :-1]# 基于比较结果创建哈希串return sum([2 ** i for (i, v) in enumerate(diff.flatten()) if v])# 比较两个图像哈希值的汉明距离,即不同位的数量def hamming_distance(hash1, hash2):return bin(hash1 ^ hash2).count('1')img_1 = Image.open("1.png")img_2 = Image.open("2.png")# 计算每张图片的dhash值hash1 = dhash(img_1)hash2 = dhash(img_2)distance = hamming_distance(hash1, hash2)# 根据汉明距离判断图片的相似性print(f"Hamming distance between the images: {distance}")if distance <= 5:print("Images are similar.")else:print("Images are not similar.")
http://www.lryc.cn/news/271757.html

相关文章:

  • 2024洗地机哪家强?口碑洗地机推荐
  • k8s的资源管理
  • docker应用部署(部署MySql,部署Tomcat,部署Nginx,部署Redis)
  • 非常好用的ocr图片文字识别技术,识别图片中的文字
  • 20231227在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单后摄像头ov13850
  • Unity中Shader裁剪空间推导(透视相机到裁剪空间的转化矩阵)
  • 企业签名分发对移动应用开发者有什么影响
  • 3D游戏角色建模纹理贴图处理
  • 【C++ 单例模式】
  • React16源码: ConcurrentMode的使用及源码实现
  • SQL性能优化-索引
  • Ubuntu本地快速搭建web小游戏网站,公网用户远程访问
  • easyrecovery 2024最新免费密钥分享 实用数据恢复软件分享
  • 2.4信道复用技术
  • JVM篇:JVM的简介
  • uniapp 输入手机号并且正则校验
  • 经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现
  • kbdnecat.DLL文件缺失,软件或游戏无法启动运营,快速修复方法
  • Dockerfile与DockerCompose
  • 【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)
  • Stable Diffusion 本地部署详细教程
  • 【超图】SuperMap iClient3D for WebGL/WebGPU —— 坐标系位置 —— Cartesian2
  • 【Matlab】LSTM长短期记忆神经网络时序预测算法(附代码)
  • 2.2 设计FMEA步骤二:结构分析
  • 红队攻防实战之DC2
  • 【28】Kotlin语法进阶——使用协程编写高效的并发程序
  • 【大数据面试知识点】Spark的DAGScheduler
  • Pycharm引用其他文件夹的py
  • 目标检测-One Stage-YOLOv1
  • PHP序列化总结3--反序列化的简单利用及案例分析