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

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

  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.mzph.cn/news/593072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux C/C++ 获取CPUID

实现方式&#xff1a; INTEL CC 格式 AT^T CC 格式 GCC/C库 __cpuid 宏 大致讲义&#xff1a; AT^T 格式汇编很反人类&#xff0c;GCC可以改编译器选项为INTEL内嵌汇编&#xff0c;但一般在GCC还是按照默认的AT^T汇编来拽写把&#xff0c;不想用也可以让AI工具把INTEL内嵌…

神经网络模型常见的类型介绍

神经网络模型有很多种类型&#xff0c;下面是一些常见的神经网络模型&#xff1a; 前馈神经网络&#xff08;Feedforward Neural Network&#xff09;&#xff1a;这是最简单、最基础的神经网络形式。在这种网络中&#xff0c;信息只朝一个方向流动&#xff0c;从输入节点经过…

Redis命令---String篇 (超全)

目录 1.Redis Setnx 命令 - 只有在 key 不存在时设置 key 的值。简介语法可用版本: > 1.0.0返回值: 设置成功&#xff0c;返回 1 。 设置失败&#xff0c;返回 0 。 示例 2.Redis Getrange 命令 - 返回 key 中字符串值的子字符简介语法可用版本: > 2.4.0返回值: 截取得到…

2024年个人工作计划怎么写?新年待办计划这样写更方便

元旦的钟声还在耳边回响&#xff0c;2024年的新篇章已经开启。面对新的一年&#xff0c;我深知一个清晰、实用的个人工作计划是多么重要。它不仅是指引我前进的灯塔&#xff0c;更是我实现目标、提升效率的秘密武器。 但如何制定这样一个计划呢&#xff1f;在过去&#xff0c;…

嵌入式开发——ADC开发

学习目标 了解ADC开发流程掌握采样方式能够使用ADC进行芯片内部通道进行采样能够使用ADC对外部电路进行采样学习内容 GD32F4的ADC 特点: 16个外部模拟输入通道;1个内部温度传感通道(VSENSE);1个内部参考电压输入通道(VREFINT);1个外部监测电池VBAT供电引脚输入通道。ADC开…

《工具录》nslookup

工具录 1&#xff1a;nslookup2&#xff1a;选项介绍3&#xff1a;示例 - 命令行模式3.1&#xff1a;查询类型设置3.2&#xff1a;指定 DNS 服务器 4&#xff1a;示例 - 交互模式5&#xff1a;其他 本文以 kali-linux-2023.3-vmware-amd64 为例。 1&#xff1a;nslookup nsloo…

Python计算三角形的面积

Python 计算三角形的面积 以下实例为通过用户输入三角形三边长度&#xff0c;并计算三角形的面积&#xff1a; # 三角形第一边长 a 3 # 三角形第二边长 b 4 c float( input("输入三角形第三边长: ") ) # 计算半周长 s (a b c) / 2 # 计算…

算法29:不同路径问题(力扣62和63题)--针对算法28进行扩展

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff0…

什么是安全信息和事件管理(SIEM),有什么用处

安全信息和事件管理&#xff08;SIEM&#xff09;对于企业主动识别、管理和消除安全威胁至关重要。SIEM 解决方案采用事件关联、AI 驱动的异常检测以及机器学习驱动的用户和实体行为分析 &#xff08;UEBA&#xff09; 等机制来检测、审查和应对网络安全威胁。这些功能使 SIEM …

AntDB设计之CheckPoint——引言与功能简述

1.引言 数据库服务能力提升是一项系统性的工程&#xff0c;在不同的应用场景下&#xff0c;用户对于数据库各项能力的关注点也不同&#xff0c;如&#xff1a;读写延迟、吞吐量、扩展性、可靠性、可用性等等。国内不少数据库系统通过系统架构优化、硬件设备升级等方式&#xf…

数据库课程设计报告——音乐管理系统

目录 省流版word文档需求分析系统目标业务需求及处理流程功能需求及数据需求分析业务规则分析 概念设计命名规范实体集及属性联系集及属性系统总ER图 逻辑设计关系的设计关系的优化数据库基本表设计 物理设计关系模式存取方式选择数据库的存储结构 数据库应用设计数据库脚本数据…

C语言链表、树、图的实现(结构体)

链表、树、图 链表树图邻接矩阵邻接表 链表 参看此线性表实现&#xff08;C语言——结构体&#xff09;博文 树 struct Tree{int val;struct Tree *left;struct Tree *right; };在上面的代码中&#xff0c;每一部分都是定义二叉树节点所必需的&#xff0c;所以没有多余的可以…

VS2022 Android NativeActivity 开发指南

几年前最初使用VS时&#xff0c;记得是有Android NativeActivity的&#xff0c;今天更新到了2022最新版&#xff0c;发现找不到这个创建选项。 然后确保安装了C 跨平台开发工具后&#xff0c;开始排查原因。 Visual Studio 2022 中没有“本机活动应用程序” - android - SO中…

LeetCode1534. Count Good Triplets

文章目录 一、题目二、题解 一、题目 Given an array of integers arr, and three integers a, b and c. You need to find the number of good triplets. A triplet (arr[i], arr[j], arr[k]) is good if the following conditions are true: 0 < i < j < k < …

Doris数仓开发规范

文章目录 一、字符集规范二、建表规范三、数据变更规范四、数据查询规范结尾 一、字符集规范 【强制】数据库字符集指定utf-8&#xff0c;并且只支持utf-8。 二、建表规范 【建议】库名统一使用小写方式&#xff0c;中间用下划线&#xff08;_&#xff09;分割&#xff0c;长…

Android 车联网——CarPackageManagerService介绍(十一)

CarPackageManagerService 主要用于车上使用场景扩充了一些包管理相关的接口。包括黑白名单的机制,这主要是出于安全的考虑,车上的应用有更严格的限制。结合用户体验限制对运行在Android Automotive OS 上的应用有一个更好的约束。 一、简介 CarPackageManagerService 是 An…

力扣42. 接雨水

双指针法 思路&#xff1a; 将数组前后设置为 left、right 指针&#xff0c;相互靠近&#xff1b;在逼近的过程中记录两端最大的值 leftMax、rightMax&#xff0c;作为容器的左右边界&#xff1b;更新指针规则&#xff1a; 如果数组左边的值比右边的小&#xff0c;则更新 left…

使用GO开发的IDE简介

一、IDE介绍 Goland Goland是由JetBrains公司开发的商业IDE&#xff0c;专门为Go语言开发设计。JetBrains是一家知名的软件开发公司&#xff0c;以其强大的IDE产品如IntelliJ IDEA而闻名。 优点&#xff1a; 基于IntelliJ平台&#xff0c;因此拥有与IntelliJ IDEA相似的强大功能…

【Linux操作系统】探秘Linux奥秘:进程与任务管理的解密与实战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;诗赋清音&#xff1a;柳垂轻絮拂人衣&#xff0c;心随风舞梦飞。 山川湖海皆可涉&#xff0c;勇者征途逐星辉。 目录 &#x1fa90;1 初识Linux OS &…

4462 4.曙曙献爱心

#include<bits/stdc.h> using namespace std; int n,m,k; int a[1001]; int s[1001]; int f[1001][1001];//f[i][j]&#xff0c;i个警察&#xff0c;j个点&#xff0c;能管理的最大人数 int main(){cin>>n>>m>>k;for(int i1;i<n;i){cin>>a[i…