Python--图片去重 按文件大小读取

Python–图片去重 按文件大小读取

最近在做图片处理任务
分完图片发现有很多一样的
但是python os.walk()返回的的文件列表顺序会不一样
之前写的代码 要全部遍历所有图片 一张图和剩下所有图对比 虽然说准确率很高 但是效率特别低
然后我发现在文件夹里把图片按大小排序相似的图片会相邻
这样只要相邻图片对比就能move (意思是1和2对比,3和4对比等等)不用全部遍历就可了 虽然不能做到100%准确 但是速度大大提升!我快乐了!之前遍历全部的六千张图我跑了一天……

附代码

import os
import cv2
from skimage.measure import compare_ssim
import shutil
import random


def delete(filename1):
    os.remove(filename1)


def move(filename1,filename2):
     shutil.move(filename1,filename2)


if __name__ == '__main__':
    path = r'C:\Users\lenovo\Desktop\image_all\0'
    save_path_img = r'C:\Users\lenovo\Desktop\image_all\delete1'
    os.makedirs(save_path_img, exist_ok=True)
    fileMap = {}
    size = 0
    # 遍历filePath下的文件、文件夹(包括子目录)
    for parent, dirnames, filenames in os.walk(path):
        #for dirname in dirnames:
            # print('parent is %s, dirname is %s' % (parent, dirname))
        for filename in filenames:
            # print('parent is %s, filename is %s' % (parent, filename))
            # print('the full name of the file is %s' % os.path.join(parent, filename))
            size = os.path.getsize(os.path.join(parent, filename))
            fileMap.setdefault(os.path.join(parent, filename), size)
    filelist = sorted(fileMap.items(), key=lambda d: d[1], reverse=False)
    img_files= []
    for filename, size in filelist:
        img_files.append(filename)
        # print("filename is %s , and size is %d" % (filename, size))
    imgs_n = []
    num = []
    print(img_files)
    for currIndex, filename in enumerate(img_files):
        img = cv2.imread(img_files[currIndex])
        img1 = cv2.imread(img_files[currIndex + 1])
        ssim = compare_ssim(img, img1, multichannel=True)
        if ssim > 0.9:
            imgs_n.append(img_files[currIndex + 1])
            print(img_files[currIndex], img_files[currIndex + 1], ssim)
        else:
            print('small_ssim',img_files[currIndex], img_files[currIndex + 1], ssim)
        currIndex += 1
        if currIndex >= len(img_files)-1:
            break
    for image in imgs_n:
        move(image, save_path_img)
        # delete(image)

代码部分有所参考一些博文 但是不知道哪里看得了 请见谅 作者看到可私信我 我附上引用链接啦
嘻嘻 这是我入驻CSDN的第一篇文章哎
本文链接:https://blog.csdn.net/weixin_42385606/article/details/104718533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值