python图片去重

python图片去重

from PIL import Image
import imagehash
import os
import numpy as np


def similar_images(dirname, similarity=0.9):
    hash_size = 8
    image_list = []
    hash_list = []
    duplicates = []

    threshold = 1 - similarity
    diff_limit = int(threshold * (hash_size ** 2))

    # 遍历目录中的所有图片
    for filename in os.listdir(dirname):
        if filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg") or filename.endswith(
                ".webp"):
            img_path = os.path.join(dirname, filename)

            # 计算图片的hash值
            hash = imagehash.average_hash(Image.open(img_path), hash_size).hash
            # 比较当前图片的hash值与之前所有图片的hash值
            for i in range(len(hash_list)):
                if np.count_nonzero(hash != hash_list[i]) <= diff_limit:
                    duplicates.append([image_list[i], img_path])

            # 将当前图片的hash值添加到列表中
            hash_list.append(hash)
            # 将当前图片的路径添加到列表中
            image_list.append(img_path)
            print(img_path)

    return duplicates




if __name__ == "__main__":

    result = similar_images("/Users/mac/Desktop/data/guanxi",0.8)
    ## 直接删除图片
    for i in range(len(result)):
        sim_imgs = list(set(result[i]))
        sim_imgs.sort()
        print(f"delete duplicates{sim_imgs[-1]}")
        if os.path.exists(sim_imgs[-1]):
            os.remove(sim_imgs[-1])




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值