Python: las imágenes se leen nuevamente según el tamaño del archivo

Imagen de Python para leer según el tamaño del archivo

Recientemente, estaba haciendo tareas de procesamiento de imágenes. Después de
dividir las imágenes, descubrí que hay muchas iguales,
pero el orden de la lista de archivos devuelta por python os.walk () será diferente
. El código que escribí antes debe atravesar todas las imágenes. La precisión es muy alta, pero la eficiencia es particularmente baja.
Luego descubrí que las imágenes en la carpeta están ordenadas por tamaño y las imágenes similares serán adyacentes, de
modo que mientras se comparen las imágenes adyacentes, puede moverse (es decir, comparación 1 y 2, comparación 3 y 4, etc.) No es necesario atravesarlos todos. Aunque no puede ser 100% exacto, ¡la velocidad ha mejorado enormemente! Estoy feliz Atravesé las seis mil fotos antes y corrí por un día ...

Código adjunto

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)

La parte del código tiene algunas publicaciones en el blog, pero no sé dónde puedo verla. Perdone al autor. Puedo ver la carta privada. Adjunto el enlace de referencia.
Hee hee. Este es mi primer artículo en CSDN. Hola,
enlace al artículo: https: //blog.csdn .net / weixin_42385606 / article / details / 104718533

3 artículos originales publicados · Me gusta0 · Visitas 123

Supongo que te gusta

Origin blog.csdn.net/weixin_42385606/article/details/104718533
Recomendado
Clasificación