qq临时会话网站,c语言软件开发和网站开发区别,做网站心得,上海网站建设联系方式判断两张图片是否为完全相同的图片
批量判断尺寸 大小 图像展示内容体是否完全一致的图片
import os
import hashlib
from PIL import Imagedef check_img_repeat(directory):批量对图片进行重复性校验是检查一组图像中是否有相同或几乎相同的图像副本。一…判断两张图片是否为完全相同的图片
批量判断尺寸 大小 图像展示内容体是否完全一致的图片
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)若图像有轻微修改如尺寸变化裁剪或者质量差异MD5哈希值会改变。要检测这类相似图像的重复性就需要更为复杂的图像处理算法常见的有感知哈希算法(如pHash)。
def check_img_repeat():感知哈希算法Perceptual Hashing Algorithm简称pHash能够生成图像的“指纹”即使在图像质量变化、缩放或其他形式的处理后只要内容不变生成的指纹也会相似。这种算法常用于图像的相似性比较。param directory:return:def dhash(img, hash_size8):# 图像转成灰度图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(fHamming distance between the images: {distance})if distance 5:print(Images are similar.)else:print(Images are not similar.)