赞
踩
判断两张图片的内容是否一致【Python 两种方法】
马富天
2019-12-12 17:42:29
39
【摘要】在很多时候需要对相同的图片进行去重处理,这些图片可能是格式不同(png、jpg等),但是图片的内容可能是一样的,我们需要对相同图片进行删除,本文记录一下如何判断两张图片内容是否相同,并用 python 给出具体代码。
首先,我们用一张图片 1.jpg 生成两张图片,一张是 2.jpg,一张是 2.png。由于 png 是无损压缩的,所以 1.jpg = 2.png,而 jpg 保留时有被压缩,因此 1.jpg != 2.jpg。import cv2
img = cv2.imread('1.jpg')
cv2.imwrite('2.jpg',img)
cv2.imwrite('2.png',img)
接下来我们用这三张图片来进行图片内容是否相同的比较。第一种方法是使用 md5() 对图片内容的加密后,判断 md5 值是否相同,完整代码如下:import cv2
import hashlib
img1 = cv2.imread('1.jpg')
img2 = cv2.imread('2.jpg')
img3 = cv2.imread('2.png')
def to_md5(img):
m = hashlib.md5()
m.update(img)
md5_val = m.hexdigest()
return md5_val
img1_md5 = to_md5(img1)
img2_md5 = to_md5(img2)
img3_md5 = to_md5(img3)
if img1_md5 == img2_md5:
print('1.jpg vs 2.jpg yes')
else:
print('1.jpg vs 2.jpg no') # 输出
if img1_md5 == img3_md5:
print('1.jpg vs 2.png yes') # 输出
else:
print('1.jpg vs 2.png no')
第二种方法,采用 numpy 对图片内容进行转换成 np.array,然后通过比较转换后的 numpy 数组是否一致来判断内容是否相同,完整代码如下:import cv2
import numpy as np
img1 = cv2.imread('1.jpg')
img2 = cv2.imread('2.jpg')
img3 = cv2.imread('2.png')
img1_np_arr = np.array(img1)
img2_np_arr = np.array(img2)
img3_np_arr = np.array(img3)
if np.all(img1_np_arr == img2_np_arr):
print('1.jpg vs 2.jpg yes')
else:
print('1.jpg vs 2.jpg no') # 输出
if np.all(img1_np_arr == img3_np_arr):
print('1.jpg vs 2.png yes') # 输出
else:
print('1.jpg vs 2.png no')
很久没有写博客了,这次记录一篇关于图片处理的文章,因为最近工作上跟图片处理有相关的,所以记录一下。注意:将 1.jpg 存储为 2.jpg 时从肉眼上是看不出来是否相同的。
本文比较简单啊,希望大家不要dis哦~
顶0
踩0
我要打赏
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。