python查找重复图片并删除(图片去重)

Python查找重复图片并删除(图片去重)

1. 简介

在使用计算机存储图片的时候,往往会遇到大量的图片需要存储。但是很多时候,我们会发现有些图片是相同的,却被存储了多次。这样不仅浪费了硬盘的空间,而且也不方便图片查找和管理。因此,我们需要一种方式来对图片进行去重。

Python是强大的编程语言,它提供了各种各样的库,可以帮助我们实现各种功能,包括图片去重。在本文中,我们将介绍一种使用Python查找重复图片并删除的方法。

2. 实现步骤

2.1 安装必要的库

首先,我们需要安装必要的Python库:Pillow。Pillow是Python中一个强大的图像处理库,支持图像格式转换,图像过滤,图像增强等功能。我们可以使用下面的命令来安装Pillow:

pip install Pillow

2.2 查找重复图片

接下来,我们需要写一个Python脚本来查找重复图片。我们可以使用以下步骤:

  1. 遍历所有的文件夹和文件,获取所有的图片文件路径
  2. 对于每个图片文件,计算图片的哈希值
  3. 将每个图片的哈希值组成一个列表
  4. 比较哈希值列表,找到重复的图片

下面是一个示例代码,用于遍历一个文件夹中的所有文件,并获取图片文件路径:

import os

def get_image_files(path):
    # 遍历文件夹,获取所有的图片文件路径(jpg、png、bmp等)
    image_files = []
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith('.jpg') or file.endswith('.png') or file.endswith('.bmp'):
                image_file = os.path.join(root, file)
                image_files.append(image_file)
    return image_files

下面是一个示例代码,用于计算一个图片的哈希值:

from PIL import Image
import imagehash

def get_image_hash(image_path):
    # 计算图片的哈希值
    with open(image_path, 'rb') as f:
        image = Image.open(f)
        image_hash = imagehash.phash(image)
    return str(image_hash)

下面是一个示例代码,用于将所有图片的哈希值组成一个列表:

def get_image_hashes(image_files):
    # 将所有图片的哈希值组成一个列表
    image_hashes = []
    for image_file in image_files:
        image_hash = get_image_hash(image_file)
        image_hashes.append(image_hash)
    return image_hashes

下面是一个示例代码,用于比较哈希值列表,找到重复的图片:

def find_duplicate_images(image_files):
    # 查找重复的图片
    image_hashes = get_image_hashes(image_files)
    unique_hashes = set(image_hashes)
    print('Total images:', len(image_files))
    print('Unique images:', len(unique_hashes))
    for hash_value in unique_hashes:
        if image_hashes.count(hash_value) > 1:
            print('---------------------------------------')
            print('Duplicate images found for:', hash_value)
            for i in range(len(image_hashes)):
                if image_hashes[i] == hash_value:
                    print(image_files[i])

2.3 删除重复图片

最后,我们需要修改上面的代码,以便删除重复的图片。在发现重复图片时,我们可以将其中一个图片删除,以保留另一个图片。下面是一个示例代码,用于删除图片:

import os

def delete_image(image_file):
    # 删除指定的图片文件
    os.remove(image_file)

接下来,我们可以修改上面的代码,以便删除重复的图片:

def delete_duplicate_images(image_files):
    # 删除重复的图片
    image_hashes = get_image_hashes(image_files)
    unique_hashes = set(image_hashes)
    print('Total images:', len(image_files))
    print('Unique images:', len(unique_hashes))
    for hash_value in unique_hashes:
        if image_hashes.count(hash_value) > 1:
            print('---------------------------------------')
            print('Duplicate images found for:', hash_value)
            for i in range(len(image_hashes)):
                if image_hashes[i] == hash_value:
                    print(image_files[i])
                    delete_image(image_files[i])

3. 示例说明

3.1 示例1

假设我们有一个文件夹,其中包含以下文件:

- images
  - image1.jpg
  - image2.jpg
  - image3.jpg
  - image4.jpg

其中,image1.jpg和image2.jpg是相同的图片,image3.jpg和image4.jpg是不同的图片。

我们可以使用以下代码来查找并删除重复的图片:

image_files = get_image_files('images')
delete_duplicate_images(image_files)

在运行后,我们将得到以下输出:

Total images: 4
Unique images: 3
---------------------------------------
Duplicate images found for: 4227c0b003030303
images/image2.jpg
images/image1.jpg

其中,'4227c0b003030303'是重复图片的哈希值。我们可以看到,该方法成功地找到了image1.jpg和image2.jpg是相同的图片,并删除了其中一个。

3.2 示例2

假设我们有一个文件夹,其中包含以下文件:

- images
  - image1.jpg
  - image2.jpg
  - image3.jpg
  - image4.png

其中,image1.jpg和image2.jpg是相同的图片,image3.jpg和image4.png是不同的图片,且格式不同。

我们可以使用以下代码来查找并删除重复的图片:

image_files = get_image_files('images')
delete_duplicate_images(image_files)

在运行后,我们将得到以下输出:

Total images: 4
Unique images: 3
---------------------------------------
Duplicate images found for: 4227c0b003030303
images/image2.jpg
images/image1.jpg

其中,'4227c0b003030303'是重复图片的哈希值。我们可以看到,该方法成功地找到了image1.jpg和image2.jpg是相同的图片,并删除了其中一个。虽然image3.jpg和image4.png是不同的图片,但是由于它们的格式不同,因此不会被视为重复图片。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python查找重复图片并删除(图片去重) - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python解压 rar、zip、tar文件的方法

    当你需要处理大量的压缩文件时,可以使用Python来解压 rar、zip、tar等文件。下面是Python解压 rar、zip、tar文件的方法: 解压 rar 文件 使用Python的第三方库rarfile来处理.rar文件,以下是示例代码: import rarfile # 创建 rarfile 对象 rf = rarfile.RarFile(‘demo…

    python 2023年5月20日
    00
  • Python中文字符串截取问题

    下面是Python中文字符串截取问题的完整攻略。 问题描述 在Python中,当字符串中包含中文字符时,对该字符串的截取操作会出现一些问题。比如,我们要截取一个中文字符串的一部分,但是用普通的中括号[]操作会得到意想不到的结果,如下面的例子所示: s = "这是一段中文字符串" s_sub = s[2:6] # 截取第3个字符到第7个字符…

    python 2023年5月20日
    00
  • python boto和boto3操作bucket的示例

    下面是关于“Python Boto和Boto3操作Bucket的示例”的详细攻略: 1. 安装Boto和Boto3 在开始使用Boto和Boto3之前,需要先安装它们。可以使用pip来进行安装,命令如下: pip install boto boto3 2. 连接到AWS 在使用Boto和Boto3操作Bucket之前,需要先连接到AWS。可以使用AWS访问密…

    python 2023年6月2日
    00
  • python3让print输出不换行的方法

    当使用Python 3的print函数输出时,默认情况下会在每次输出后自动添加一个换行符。但有时候我们需要把多个print函数输出的内容放在同一行,此时就需要用到print函数的不换行输出方法。以下是两种不换行输出的方法: 方法一:使用print函数的end参数 我们可以使用print函数的end参数来控制输出结束时要添加的字符。如果在每次print输出时使…

    python 2023年6月5日
    00
  • python中List的sort方法指南

    以下是详细讲解“Python中List的sort()方法指南”的完整攻略。 List.sort()方法的使用 在Python中,List.sort()方法用于对列表进行排序。该方法会修改列表而不是返回一个列表。sort()方法的语法如下: list.sort(key=None, reverse=False) 其中,key表示用于排序的,reverse表示是否…

    python 2023年5月13日
    00
  • python中3种等待元素出现的方法总结

    让我来给您详细讲解“Python中3种等待元素出现的方法总结”的攻略。 1. 等待元素出现的必要性 在使用爬虫、自动化测试或者类似工具时,经常需要等待某个页面元素出现。但是,由于网络状况、服务器响应等原因,元素可能在不同的时间到达DOM。这就导致了在代码执行期间某些页面元素可能还没有出现的情况。如果在这种情况下强行去获取元素,通常会抛出异常,造成任务执行失败…

    python 2023年5月13日
    00
  • Python基于Opencv来快速实现人脸识别过程详解(完整版)

    Python基于Opencv来快速实现人脸识别过程详解(完整版) 简介 本文将详细介绍使用Python和OpenCV完成人脸识别的方法和步骤,由于OpenCV是一个广泛应用于计算机视觉的开源库,本文将利用其强大的功能来实现人脸识别的全过程。 步骤 步骤1、 准备数据集 在进行人脸识别过程中,我们需要一个包含训练数据的数据集,数据集是包含一组图片的集合,图片应…

    python 2023年5月18日
    00
  • 详解python中的 is 操作符

    当我们说一个变量“是”另一个变量时,我们通常想要比较它们在内存中的位置。在Python中,使用is操作符可以比较两个对象的身份标识是否相同。我们来详细探讨以下Python中的is操作符。 目录 is操作符的语法 is操作符与 == 操作符的比较 示例1:比较字符串变量的身份标识 示例2:比较列表变量的身份标识 结论 1. is操作符的语法 在Python中,…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部