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