简单的批量数据增强
实现目标:
1、读取文件中所有的图片。
2、将图片化为 256*256大小。
3、对图像进行翻转增强。
4、将图片重命名、创建并保存在指定文件夹下。
首先先来看一下文件目录
一、读取文件中所有图片
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)
原文件:
增强后的文件: