python - 以最快的方式查找重复的图像

标签 python c++ multithreading image-processing

我有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/

关于python - 以最快的方式查找重复的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63195790/

相关文章:

python - Pycharm 不使用 nosetests 配置文件

python - 通过 bash 替换单个 CSV 字段中的额外双引号

c++ - gcc:体系结构 x86_64 的 undefined symbol ,缺少 vtable

java - 线程处于 RUNNABLE 状态但堆栈跟踪显示它正在处理?

c# - 应该异步执行对 NetworkStream 的写入

multithreading - 为什么阻塞系统调用会阻塞用户级线程的整个过程?

python - 如何对动态数据框进行OLS回归并估计斜率系数?

python - google drive sdk quickstart python示例错误

c++ - 在 C++ 程序中评估从 max 导出的 3d 样条曲线

c++ - 错误 C2248 : Protected Default Constructor C++ within an class owned by another class