python查找重复图片并删除(图片去重)
本文实例为大家分享了python查找重复图片并删除的具体代码,供大家参考,具体内容如下 和网络爬虫配套的,也可单独使用,从网上爬下来的图片重复太多,代码支持识别不同尺寸大小一致的图片,并把重复的图片删除,只保留第一份。 # -*- coding: utf-8 -*- import cv2 import numpy as np import os,sys,types def cmpandremove2(path): dirs = os.listdir(path) dirs.sort() if len(dirs) <= 0: return dict={} for i 在Python编程中,有时我们需要处理大量的图片数据,例如在进行网络爬虫时,可能会下载到很多重复的图片。为了优化存储空间,可以编写脚本来查找并删除这些重复的图片。本篇文章将介绍一种使用Python实现的图片去重方法,通过比较图片的像素信息来判断是否为重复图片。 我们需要导入必要的库,包括`cv2`(OpenCV)用于图像处理,`numpy`用于数组操作,以及`os`和`sys`库来处理文件路径和系统交互。以下是主要的导入语句: ```python import cv2 import numpy as np import os, sys, types ``` 接下来,定义一个名为`cmpandremove2`的函数,该函数接收一个参数`path`,即图片所在的目录。这个函数首先获取该目录下的所有文件名,然后对每个文件进行处理。如果图片无法读取(可能是由于文件损坏),则跳过当前文件。对可读取的图片,先将其缩小到固定的尺寸(例如8x8像素),然后转换为灰度图。接着计算图片的平均像素值,并将像素值高于平均值的设为1,低于的设为0。这样,每张图片就被表示为一个8x8的二维数组,便于比较。 接下来,创建一个字典来存储图片的像素表示,键是图片的文件名,值是对应的像素数组。然后通过遍历字典,比较每对图片的像素数组差异,如果差异小于或等于5,则认为这两张图片是重复的,将重复的图片文件从硬盘上删除。 这里使用了一个简单的策略来减少比较次数:对于每张图片,只与尚未比较过的图片进行比较。如果找到多张重复的图片,将其加入待删除列表,最后再进行删除操作。 除此之外,还有一个简化版的`cmpandremove`函数,其功能与`cmpandremove2`类似,但没有采用字典存储像素表示,而是直接在遍历过程中进行比较。这可能导致比较次数更多,效率稍低,但在某些情况下可能更直观易懂。 需要注意的是,这种基于像素值的比较方法可能会因为图片尺寸的微小差异或者轻微的压缩效果而将不同的图片误判为重复。如果需要更精确的比较,可以考虑使用更复杂的图像特征提取方法,如SIFT、SURF等。 总结来说,这篇文章提供了一种用Python进行图片去重的简单实现,通过比较图片的像素直方图来判断是否为重复图片。这种方法虽然可能不够完美,但对于大部分情况已经足够有效。在实际应用中,可以根据需求调整图片尺寸、阈值等参数,以适应不同的去重需求。