【python&遍历图片进行分类转存到不同的文件夹】

【python&遍历图片进行分类转存到不同的文件夹】

在这里插入图片描述

功能说明

当不同类型的图片存放在同一个文件夹中,方便进行分类,用一个脚本,遍历读取文件夹下的所有图片,并创建一个窗口进行展示,然后输入不同的数字类别进行分类,相同种类的图片转存到自动创建的类别文件夹中。

效果展示:(分类前)
在这里插入图片描述

分类后:
在这里插入图片描述

代码实现


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/05/26
# @Author  : Kenn_Wu
# purpose : to pick up different pictures to transfer into different dirs when you input different classify numbers


import cv2
import os


class_name = ['car', 'people', 'bicycle']
#                1        2           3   


origin_path = './'      # 要分类的图片文件夹路径

to_path = './ground_truth/'              # 最终要保存的文件路径,判断不存在则自动创建
if  not  os.path.exists(to_path):
    os.mkdir(to_path)
    
def shearfile(src, dir):                 # 定义一个移动(剪切)图片的函数
    filename = os.path.basename(src)     # 遍历得到文件/图片的初始文件名
    save_path =  to_path + dir           # 保存文件/图片的文件夹,判断不存在则创建
    if not os.path.exists(save_path):
        os.mkdir(save_path)

    os.rename(src, save_path + '/' + '_' +filename)  # 使用rename函数,更改移动后的文件名(在原文件名的基础上增加了类别名)


    for root, dirs, files in os.walk(origin_path):    # 同时遍origin_path当前路径下的所有文件夹,子文件
        for file in files:
            
            key = 0
            name = ""
            img = cv2.imread(origin_path + file)      # 遍历得到图片子文件
            cv2.imshow('image',img)                   # 创建一个窗口展示遍历图片
            key = cv2.waitKey(0)  
            cv2.destroyAllWindows()                   


            if key ==  49:   
                name = class_name[0]
            elif key == 50:                    
                name = class_name[1]
            elif key == 51:                   
                name = class_name[2]
            else:
                print('请输入:1 or 2 or 3 to classify')
                break

            shearfile(origin_path+file, name)


知识点补充

涉及知识:

key对应的ASCⅡ码数值 (常用)

key: 48-57 对应 键盘上数字 0-9
vbKeyEscape 27 表示 ESC 键
A 键到 Z 键与其 ASCII 码的相应值’A’ 到 ‘Z’ 是一致的(‘A’ 到 ‘Z’ ---->65-90)

② python BIF:

if not os.path.exists(to_path):
os.mkdir(to_path)

③ 遍历文件夹path下的所有文件使用:for root, dirs, files in walk(path)函数。
for root, dirs, files in os.walk(origin_path):

origin_path代表需要遍历的根文件夹
root表示正在遍历的文件夹的名字(根/子)
dirs正在遍历的文件夹下的子文件夹集合
files正在遍历的文件夹中的文件集合

④ rename函数,内参数为:(原名称,更改后的名称)
os.rename(name, new_name)

waitKey(delay)函数

waitKey(delay)函数的功能是不断刷新图像,频率时间为delay,单位为ms
返回值为当前键盘按键值。
waitKey(delay)–是在一个给定的时间内(单位ms)等待用户按键触发;
如果用户没有按下键,则接续等待(循环)设置waitKey(0),则表示程序会无限制的等待用户的按键事件。
一般在imgshow的时候,如果设置waitKey(0),代表按任意键继续
显示视频时,延迟时间需要设置为 大于0的参数,用于设置在显示完一帧图像后程序等待”delay”ms再显示下一帧视频;如果使用waitKey(0)则只会显示第一帧视频

Reference:

https://blog.csdn.net/u014737138/article/details/80375514
https://blog.csdn.net/cncco/article/details/1540202

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值