python 对图片按照尺寸分类

对文件夹下的图片,使用opencv读取宽高属性,并按照宽高分文件夹存储。


import cv2
import numpy as np
from shutil import copyfile, move
import os
import time


def get_file_list(path, suffix):
    Filelist = []
    for home, dirs, files in os.walk(path):
        for filename in files:
            if filename.endswith(suffix):
                Filelist.append(os.path.join(home, filename))
    return Filelist


if __name__ == "__main__":
    '''
        实现对test目录下图片进行分类,并将结果保存在results下
    '''
    # src_path = r"D:\src"
    src_path = r"D:\src\other"
    dst_path = r"D:\dst"
    sizefilter = [[600, 1300], [1100, 1600], [2300, 1600], [800, 1500], [600, 1500], [700, 1400], [1000, 1700], [2100, 1800], [2000, 1400]]
    foldername = ["size_6_13", "size_11_16", "other", "size_23_16", "size_8_15", "size_6_15", "size_7_14", "size_10_17", "size_21_18", "size_20_14"]
    Filelist = get_file_list(src_path, ".jpg")
    print(len(Filelist))
    for filename in Filelist:
        sz = os.path.getsize(filename)
        if sz == 0:
            continue
        img = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), 1)
        if img is None:
            continue
        (H, W) = img.shape[:2]
        # 将图片按不同尺寸分类保存
        midname = dst_path
        if sizefilter[0][0] < H < sizefilter[0][0]+100 and sizefilter[0][1] < W < sizefilter[0][1]+100:
            midname = os.path.join(midname, foldername[0])
        elif sizefilter[1][0] < H < sizefilter[1][0]+100 and sizefilter[1][1] < W < sizefilter[1][1]+100:
            midname = os.path.join(midname, foldername[1])
        elif sizefilter[2][0] < H < sizefilter[2][0]+100 and sizefilter[2][1] < W < sizefilter[2][1]+100:
            midname = os.path.join(midname, foldername[3])
        elif sizefilter[3][0] < H < sizefilter[3][0]+100 and sizefilter[3][1] < W < sizefilter[3][1]+100:
            midname = os.path.join(midname, foldername[4])
        elif sizefilter[4][0] < H < sizefilter[4][0]+100 and sizefilter[4][1] < W < sizefilter[4][1]+100:
            midname = os.path.join(midname, foldername[5])
        elif sizefilter[5][0] < H < sizefilter[5][0]+100 and sizefilter[5][1] < W < sizefilter[5][1]+100:
            midname = os.path.join(midname, foldername[6])
        elif sizefilter[6][0] < H < sizefilter[6][0]+100 and sizefilter[6][1] < W < sizefilter[6][1]+100:
            midname = os.path.join(midname, foldername[7])
        elif sizefilter[7][0] < H < sizefilter[7][0] + 200 and sizefilter[7][1] < W < sizefilter[7][1] + 200:
            midname = os.path.join(midname, foldername[8])
        elif sizefilter[8][0] < H < sizefilter[8][0] + 200 and sizefilter[8][1] < W < sizefilter[8][1] + 200:
            midname = os.path.join(midname, foldername[9])
        else:
            midname = os.path.join(midname, foldername[2])

        file = filename.rsplit('\\', 1)[1]
        output_name_file = os.path.join(midname, file)
        output_name_dir = output_name_file.rsplit('\\', 1)[0]
        if not os.path.exists(output_name_dir):
            os.makedirs(output_name_dir)
        if filename == output_name_file:
            continue
        # copyfile(filename, output_name_file)
        move(filename, output_name_file)




 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值