python - 以最快的方式查找重复图像
问题描述
我有 2 个包含 10k 和 35k 图像的图像文件夹。每个图像的大小约为(2k,2k)。
我想删除完全重复的图像。
不同图像的变化只是某些像素的变化。
我尝试过 DHashing、PHashing、AHashing,但由于它们是有损图像散列技术,因此它们也为非重复图像提供相同的散列。
我还尝试在 python 中编写代码,它只会减去图像,并且结果数组在任何地方都不为零的组合使这些图像对彼此重复。但是单个组合的时间是 0.29 秒,总共 3.5 亿个组合的时间真的很长。
有没有办法在不标记非重复图像的情况下以更快的方式做到这一点。我愿意用任何语言(C、C++)、任何方法(分布式计算、多线程)来准确解决我的问题。
如果我添加了一些不相关的方法,我深表歉意,因为我不是来自计算机科学背景。
下面是我用于 python 方法的代码 -
start = timeit.default_timer()
dict = {}
for i in path1:
img1 = io.imread(i)
base1 = os.path.basename(i)
for j in path2:
img2 = io.imread(j)
base2 = os.path.basename(j)
if np.array_equal(img1, img2):
err = img1.astype('float') - img2.astype('float')
is_all_zero = np.all((err == 0))
if is_all_zero:
dict[base1] = base2
else:
continue
stop = timeit.default_timer()
print('Time: ', stop - start)
解决方案
您应该找到有关如何删除重复文件(不仅是图像)的答案。然后您可以使用,例如,fdupes
或找到一些替代软件:https ://alternativeto.net/software/fdupes/
推荐阅读
- ruby-on-rails - 使用带有 JWT 令牌的 RSpec 测试用户注册
- python-3.x - 如何检查我想在我的 python 3.x 程序中打开的文件是否已被 Windows 中的另一个程序打开?
- bash - 如何在问号之后(包括问号)从字符串中删除字符?
- c++ - 在 C++ 控制台中更改文本颜色
- perl - perl 在应用程序之间使用信号
- mamp - 升级后 MAMP 本地站点将无法运行
- java - 将 null 转换为 ""
- scrapy - Scrapy shell 找不到响应对象
- comments - Inno Setup Pascal 脚本中的多行注释
- java - 尝试使用 java/android 从 url 流中获取元数据时出错