简单的批量数据增强(采用pillow库)

简单的批量数据增强

实现目标:

1、读取文件中所有的图片。
2、将图片化为 256*256大小。
3、对图像进行翻转增强。
4、将图片重命名、创建并保存在指定文件夹下。

首先先来看一下文件目录

图片存放在最后5个文件夹中

一、读取文件中所有图片

import os
from PIL import Image
#路径:root_dir:存放5个图片文件夹的文件路径
#路径:new_root: 数据增强后存放的位置路径
root_dir = r"D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers"    #根目录
new_root =r"D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\photo_force"

这里首先需要明确一个函数(见知乎上这篇博主的文章)
os.walk()函数的介绍
可知:

for a, b, c in os.walk("test"):
    print(a)     #当前test所在文件目录
    print(b)     #test的子目录
    print(c)     #test的子文件

在看完这篇文章后需要注意几点
1、设置tmp
由于在for photo_root,_,photolist in os.walk(root_dir):
第一层循环中photo_root、photolist 所在目录分别为:D:\xuexi\python\python\practicaltraining\day1\code_pillow\Resource\flowers 和 []
无法直接取得文件中的图片,因此要将第一层循环给排除,让tmp>0时进行循环。
2、在检测文件夹是否存在以及创建上发现路径上的问题:

#文件是否存在
            if os.path.isdir(new_class_dir):
                pass
            else:
                os.makedirs(new_class_dir)     #创建文件

os.makedirs()与os.mkdir()的区别:
os.makedirs(path) : 创建多级路径 会把path所指路径整个创建

os.mkdir(path) : 只创建path中的最后一级路径
若运用os.mkdir(path)会发现路径错误。

tmp = 0
for photo_root,_,photolist in os.walk(root_dir):
    if tmp > 0:     #从flowers文件下的文件开始取图片的名字
        # photo_root:
        # photo_root= D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers\daisy
        # photo_root= D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers\dandelion
        # photo_root= D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers\roses
        # photo_root= D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers\sunflower
        # photo_root= D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers\tulip
        # photolist:
        #     daisy、dandelion 、roses、sunflower、tulip
        # 含文件夹(图片)数量:15 、 12 、 17 、 9 、9
        # 文件夹(图片)名字:
        #
        print("====================================================")
        print("图片文件路径(photo_root):",photo_root)        #当前放图片的文件
        photonumber = len(photolist)  #图片的数量
        print("图片名称(photolist):",photolist)
        print("文件中图片的数量(photonumber): ",photonumber)
        print("=====================================================")
        for photo_i in photolist:    #依次便利每个文件中的图片
            photo_path = os.path.join(photo_root, photo_i)   # 获取完整的文件路径
            print("完整图片路径(photo_path): ",photo_path)

            # 打开文件
            photo = Image.open(photo_path) # 打开图片
            # 图片压缩
            photo_compression = photo.resize((256,256)) # 压缩后的原图
            # 左右反转
            photo_left_right = photo_compression.transpose(Image.FLIP_LEFT_RIGHT)
            # #上下翻转
            # photo_up_down = photo_compression.transpose(Image.FLIP_UP_down)
            # 设定新的名字
            photo_path_newname = photo_path[:-4]+"_l.jpg"
            print("图片路径的的新名字(photo_path_newname):",photo_path_newname)    #D:\xuexi\python\python\practical-training\day1\code_pillow\Resource\flowers\daisy\100080576_f52e8ee070_n_l.jpg

            # 保存,获取文件夹的名称
            '''
            os.path.split(Path)
            以 "PATH" 中最后一个 '/' 作为分隔符,分隔后,将索引为0的视为目录(路径),将索引为1的视为文件名
                  例如:os.path.split('C:/soft/python/test.py')
                                    ('C:/soft/python', 'test.py')
                        os.path.split('C:/soft/python/test')
                                    ('C:/soft/python', 'test')
                        os.path.split('C:/soft/python/')
                                    ('C:/soft/python', '')
            '''
            photo_newname = os.path.split(photo_path_newname)[1]
            print("图片的新名字(photo_newname):",photo_newname)                         #100080576_f52e8ee070_n_1.jpg
            filename = os.path.split(photo_root)
            print("图片所在文件(filename):",filename[1])    #daisy
            # 在新的文件夹当中创建新的类别文件夹保存图片
            new_class_dir = os.path.join(new_root,filename[1])
            print("存放图片的新的文件路径名(new_class_dir):",new_class_dir)

            #文件是否存在
            if os.path.isdir(new_class_dir):
                pass
            else:
                os.makedirs(new_class_dir)     #创建文件

            # 制造新的文件保存路径
            photo_pth_newname = os.path.join(new_class_dir,photo_newname)
            print("新图片的路径名(photo_pth_newname):", photo_pth_newname)
            print("==============================================================")

            photo_left_right.save(photo_pth_newname)  # 保存反转后的图片


    tmp = tmp + 1

关于路径很绕,不过都写在代码中了,更改路径直接运行即可。
实现结果目录如下:(图片名的更改直接在原图片名后加_1.jpg)
原文件:
在这里插入图片描述
增强后的文件:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值