python - 如何使用 Python 检查超大数据集中的重复图片?

标签 python algorithm opencv

我有一个包含百万级图像的数据集,我想做的是做类似 Counter(<list of images>) 的事情。检查重复项并计算整个数据集。但是,考虑到图像的大小,将全部加载到内存中似乎是不可行的。因此,有没有办法做这样的事情?我需要自己写哈希函数和反向字典吗?

sha1 编辑:

我做了类似的事情

image = Image.open("x.jpg") # PIL library
hashlib.sha1(image)

出现类似

的错误
TypeError: object supporting the buffer API required

我现在该怎么办?

最佳答案

按照建议,您可以使用任何散列函数,并使用它来将图像文件摘要为二进制文件。然后将摘要保存在字典中并使用它来计算重复项(或者如果您愿意,可以存储更多信息)。

在最基本的情况下,对于每张图片你会做类似的事情:

import hashlib
filename = "x.jpg"
hashstr = hashlib.sha1(open(filename).read()).hexdigest()

这将在 hashstr 中返回一个十六进制字符串, 比如 5fe54dee8f71c9f13579f44c01aef491e9d6e655

正如所指出的,这只有在文件级逐字节复制时才有效。如果你想剔除相同的图像,比如说不同的分辨率或不同的尺寸,hashlib函数无济于事,您需要找到一种不同的方法来确定相等性

关于python - 如何使用 Python 检查超大数据集中的重复图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772023/

相关文章:

python - 数据帧单元格被锁定并用于运行余额计算,条件是同一行上另一个单元格的结果

用于发布多部分/表单数据编码数据的 Python 标准库

Javascript 函数不会在给定条件下终止

c# - n个点逼近到最适合的曲线

python - 如何阻止 numpy hstack 更改 opencv 中的像素值

python - 具有多个数字的欧几里得算法(GCD)?

python - 带点的 Django URL

algorithm - 如何使用 HLD 查找 LCA?

c++ - OpenCV CascadeClassifier 初始化

c++ - Opencv - 找不到头文件