判断两张图片的内容是否一致【Python 两种方法】

学习笔记 马富天 2019-12-12 17:42:29 517 0

【摘要】在很多时候需要对相同的图片进行去重处理,这些图片可能是格式不同(png、jpg等),但是图片的内容可能是一样的,我们需要对相同图片进行删除,本文记录一下如何判断两张图片内容是否相同,并用 python 给出具体代码。

首先,我们用一张图片 1.jpg 生成两张图片,一张是 2.jpg,一张是 2.png。由于 png 是无损压缩的,所以 1.jpg = 2.png,而 jpg 保留时有被压缩,因此 1.jpg != 2.jpg。

  1. import cv2
  2. img = cv2.imread('1.jpg')
  3. cv2.imwrite('2.jpg',img)
  4. cv2.imwrite('2.png',img)

接下来我们用这三张图片来进行图片内容是否相同的比较。第一种方法是使用 md5() 对图片内容的加密后,判断 md5 值是否相同,完整代码如下:

  1. import cv2
  2. import hashlib
  3. img1 = cv2.imread('1.jpg')
  4. img2 = cv2.imread('2.jpg')
  5. img3 = cv2.imread('2.png')
  6. def to_md5(img):
  7.     m = hashlib.md5()
  8.     m.update(img)
  9.     md5_val = m.hexdigest()
  10.     return md5_val
  11. img1_md5 = to_md5(img1)
  12. img2_md5 = to_md5(img2)
  13. img3_md5 = to_md5(img3)
  14. if img1_md5 == img2_md5:
  15.     print('1.jpg vs 2.jpg yes')
  16. else:
  17.     print('1.jpg vs 2.jpg no') # 输出
  18. if img1_md5 == img3_md5:
  19.     print('1.jpg vs 2.png yes') # 输出
  20. else:
  21.     print('1.jpg vs 2.png no')

第二种方法,采用 numpy 对图片内容进行转换成 np.array,然后通过比较转换后的 numpy 数组是否一致来判断内容是否相同,完整代码如下:

  1. import cv2
  2. import numpy as np
  3. img1 = cv2.imread('1.jpg')
  4. img2 = cv2.imread('2.jpg')
  5. img3 = cv2.imread('2.png')
  6. img1_np_arr = np.array(img1)
  7. img2_np_arr = np.array(img2)
  8. img3_np_arr = np.array(img3)
  9. if np.all(img1_np_arr == img2_np_arr):
  10.     print('1.jpg vs 2.jpg yes')
  11. else:
  12.     print('1.jpg vs 2.jpg no') # 输出
  13. if np.all(img1_np_arr == img3_np_arr):
  14.     print('1.jpg vs 2.png yes') # 输出
  15. else:
  16.     print('1.jpg vs 2.png no')

很久没有写博客了,这次记录一篇关于图片处理的文章,因为最近工作上跟图片处理有相关的,所以记录一下。注意:将 1.jpg 存储为 2.jpg 时从肉眼上是看不出来是否相同的。

本文比较简单啊,希望大家不要dis哦~

版权归 马富天个人博客 所有

本文标题:《判断两张图片的内容是否一致【Python 两种方法】》

本文链接地址:http://www.mafutian.com/431.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 MySQL 中 delete 语句中的子查询限制 》 下一篇《 浅谈 mysql 整型类型简介(tinyint,smallint,mediumint,int,bigint) 》

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多