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

yizhihongxing

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日

相关文章

  • 使用 Selenium 和 Python 查找网页上的所有元素

    【问题标题】:Find all elements on a web page using Selenium and Python使用 Selenium 和 Python 查找网页上的所有元素 【发布时间】:2023-04-01 13:28:01 【问题描述】: 我正在尝试使用Selenium 浏览网页并创建一组具有特定类名的所有元素,所以我一直在使用: el…

    Python开发 2023年4月8日
    00
  • Python中关于列表的常规操作范例以及介绍

    Python中关于列表的常规操作 在Python编程中,列表是一种常用的数据类型,用于表示一个有序的、可变的序列。Python提供了多种方法来操作列表,包括添加删除、修改、排序等。下面将详细介绍Python中关于列表常规操作,包括语法、参数、返回值以及示例说明。 列表的创建 在Python中,我们可以使用方括号[]来创建一个列表。下面是一个示例,演示了如何创…

    python 2023年5月13日
    00
  • .Net中控件的命名规则

    .Net中控件的命名规则是非常重要的,因为命名规范不仅会影响代码的阅读和维护,还会直接关系到代码的可读性、可靠性和可重用性。以下是.Net中控件的命名规则的完整攻略: 1. 控件的名称要有意义 不要使用无意义的控件名称,例如:Label1、TextBox1、Button1等,这样的命名规则不仅不利于程序员编写代码,而且后期审核代码时也不便于查找对应控件的属性…

    python 2023年6月3日
    00
  • 详解PIL中的图像增强

    PIL(Python Imaging Library)是Python中处理图片的标准库之一。在PIL中,图像增强是指在图像中进行修改、调整,以改变图像的外观无需改变图像的分辨率的过程。 PIL中的图像增强主要包括以下四个方面: 对比度调整; 亮度调整; 锐度调整; 色彩平衡调整。 下面我们来介绍一下如何在PIL中实现这些图像增强: 一、对比度调整 对比度调整…

    python-answer 2023年3月25日
    00
  • Python实现LRU算法的2种方法

    Python实现LRU算法的2种方法 LRU算法是一种常见的缓存淘汰策略,它可以用于实现缓存系统。在本文中,我们将讲解Python实现LRU算法的2种方法,包括使用Python标准库的collections模块和手实现LRU算法。同时,我们还将提供两个示例说明,以帮助读者更好地理解LRU法的使用方法。 方法1:使用collections模块 Python标准…

    python 2023年5月13日
    00
  • Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

    Python爬虫scrapy框架Cookie池(微博Cookie池)的使用 什么是Cookie池 Cookie池是指一组Cookie集合,可以用于模拟多个用户登录同一个网站。在爬虫中,我们可以使用Cookie池来避免频繁登录同一个网站,从而避免被封禁IP。 如何使用Cookie池 在Python爬虫中,我们可以使用scrapy框架来实现Cookie池。以下是…

    python 2023年5月15日
    00
  • 详解python的变量缓存机制

    请看下面的攻略。 详解Python的变量缓存机制 什么是变量缓存机制? 在Python中,为了节省系统内存的使用,整数、浮点数、布尔值等类型的变量,在一定条件下将被缓存起来,被重复使用,避免重复创建对象导致浪费内存。 Python中的变量缓存机制 整数类型 在Python中,整数类型的对象会被缓存,Python会为整数初始化256个缓存对象,即从-5到256…

    python 2023年5月14日
    00
  • pandas实现将日期转换成timestamp

    将日期转换成timestamp是pandas的一项重要功能,下面是一个完整的攻略,包含从简单到复杂的两个示例。 1. 将日期字符串转换成timestamp 将一个日期字符串转换成timestamp通常是我们在数据处理中需要频繁操作的,可以用pandas的to_datetime函数完成。 import pandas as pd date_str = ‘2022…

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