博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】在很多时候需要对相同的图片进行去重处理,这些图片可能是格式不同(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哦~
版权归 马富天个人博客 所有
本文标题:《判断两张图片的内容是否一致【Python 两种方法】》
本文链接地址:http://www.mafutian.com/431.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||