这个其实也可以通过适当的变化,把两张图片的推理,推广到任意两个文件的对比。
场景就是有多张图片,文件名不同,但可能是同一张图片,要把同样的图删除,可以能过循环,一一比对来删除。查找资料显示说hash值一样,文件不一定相同,hash值不一样,文件一定不一样,所以还是有点不太完美,但目前来看是够用。
import cv2
import hashlib
a = cv2.imread('a.jpg')
b = cv2.imread('b.jpg')
ah = hashlib.md5(a).hexdigest()
bh = hashlib.md5(b).hexdigest()
如果ah和bh是同一张图,那么,就可以删除了。
提供一些其它判断:
- 尽寸是否相同
- 后缀是否相同
- 通道数是否一致
- 每个像素是否全相同
以上前两点,用PIL来处理速度很快,后两点还要用numpy,可能速度慢。
from PIL import Image
import numpy as np
a = Image.open('a.jpg')
b = Image.open('b.jpg')
a.size
a.mode
b.size
b.mode
#channel
aa = np.array(a)
channel = aa.shape[-1]
#所有像素
bb = np.array(b)
np.any(aa==bb)
#或
np.testing.assert_almost_equal(aa,bb)