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:UserslenovoDesktopimage_all' save_path_img = r'C:UserslenovoDesktopimage_alldelete1' 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
- 版权声明:文章来源于网络采集,版权归原创者所有,均已注明来源,如未注明可能来源未知,如有侵权请联系管理员删除。