Python之PIL的一个实例应用

Python之PIL的一个实例应用

在做机器学习的图像预处理的时候遇到的一些问题和解决办法

from PIL import Image
from random import randint
import os,glob

img_path = glob.glob('..\Image/*.jpg')     #图片的输入路径	
img_output_path = ('..\Image_output')	#图片处理过后的输出路径
temp = os.walk('..\Image/*.jpg')   			#用walk方法遍历 temp的类型为tuple
list = []
等比例缩放部分
def rescale(image):    #等比例缩放
        w = image.size[0]		#获取长宽
        h = image.size[1]
        sizeMax = 320				#设置最大的长宽像素
        sizeMin = 256				#最小的像素
        random_size = randint(sizeMin, sizeMax)		#随机像素大小
        if w < h:
            return image.resize((random_size, round(h / w * random_size)))		#按照长宽比进行缩放
        else:
            return image.resize((round(w / h * random_size), random_size))
随机裁剪部分
def random_crop(image):   #随机裁剪
    w = image.size[0]			#取长宽
    h = image.size[1]
    size = 227					#这里用的alex net 所以设为227*227
    new_left = randint(0,w-size)		#设置裁剪开始和结束的点
    new_upper = randint(0,h-size)
    return image.crop((new_left,new_upper,size + new_left,size+new_upper))
主程序部分
def def_test():
    i = 0
    for file in img_path:			#遍历
        print(file)
        im = Image.open(file)		#打开文件	
        im = rescale(im)			#随机等比例缩放
        im = random_crop(im)		#随机裁剪
        try:						#因为这里的来源图像主要为jpg和png所以使用try-except
        	im.save('../Image_output/%s.jpg'%(list[i]))	#保存图片
        except:
        	im.save('../Image_output/%s.png'%(list[i]))	#保存图片
        print(list[i])
        if i < len(img_path):
            i = i+1
        # im.show()


if __name__ == '__main__':
    for filename in os.listdir('..\Image'): 			#对Image文件夹(此时为元祖对象)进行遍历
        list.append(filename.split(".",1)[0])
    def_test()

glob.glob()

返回所有匹配的文件路径列表(list)。它只有一个参数pathname,定义了文件路径匹配规则
这里可以是绝对路径,也可以是相对路径。

glob.iglob()

获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:
glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。这有点类似于.NET中操作数据库用到的DataSet与DataReader。

os.walk()

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
'''
	top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
	
	root 所指的是当前正在遍历的这个文件夹的本身的地址
	dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
	files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
	topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
	
	onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
	
	followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
'''
'''
os.walk 每次遍历的对象都是返回的是一个三元组(root,dirs,files)

root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
注:如果topdown 参数为真,walk 会遍历top文件夹,与top文件夹中每一个子目录。
'''

你可能感兴趣的:(机器学习,python)