Pillow(老版本叫PIL,如今被Pillow替代)是一个图像处理库,其最重要的模块就是Image模块,安装pillow,只需要使用命令
pip install Pillow
一、读取一幅图像.open()
可以使用
from PIL import Image
im = Image.open(r'C:\Users\Administrator\Desktop\picture\sucai.jpg')
im.show()
这里对于新手强调一下,在python3中对于文件路径的表达,如果直接
im = Image.open('C:\Users\Administrator\Desktop\picture\sucai.jpg')
系统会报错:SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position
这是因为在window操作系统中“\”表示的是读取路径意思,但是在python字符串中\有转义的含义,如\t可代表TAB,\n代表换行,所以我们需要采取一些方式使得\不被解读为转义字符:
-
在路径前面加r,即保持字符原始值的意思。
im = Image.open(r'C:\Users\Administrator\Desktop\picture\sucai.jpg')
-
替换为双反斜杠。
im = Image.open('C:\\Users\\Administrator\\Desktop\\picture\\sucai.jpg')
-
替换为正斜杠。
im = Image.open('C:/Users/Administrator/Desktop/picture/sucai.jpg')
二、图像的颜色变换.convert()
要读取一幅图像,并将其转换成灰度图像,只需要加上.convert(‘L’)例如:
from PIL import Image
im = Image.open('C:/Users/Administrator/Desktop/picture/sucai.jpg').convert('L')
im.show()
三、存储图像(可用来改变图像的格式)
使用在 Image 模块的 open() 函数从磁盘读取文件。你不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。要保存文件,使用 Image 类的 save() 方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。
- 图像列表的获取。例如一个file文件夹,里面有非常多的.jpg及其他格式的文件,在图像处理中,我们经常会遇到要读取文件夹中所有图片的操作,这时,我们想要获得的是带有路径的图片文件名,接下来就记录一下如何得到存放所有图片文件名的列表。首先在project下建立一个新的文件模块,命名为imtools.py,添加函数:
import os
def get_imlist(path):
"""返回目录中所有jpg图像的文件名列表"""
return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpg')]
然后返回自己需要调用列表的主程序:
import imtools
file = imtools.get_imlist(r'C:\Users\Administrator\Desktop\python\file')
此时变量file中就是一个包含所有图片的列表,后续操作可以针对file操作:
from PIL import Image
import os
import imtools
file = imtools.get_imlist(r'C:\Users\Administrator\Desktop\python\file')
for infile in file:
outfile = os.path.splitext(infile)[0]+ '.jpg'
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("can't convert")
遍历file列表,将所有图像文件的文件名和文件格式拆开,将所有文件名拿出来单独加上.jpg的后缀,此时就形成了一个新的列表,后面判断语句,如果文件名.jpg与原来的不同(说明原来不是.jpg文件),则try以下操作:打开该infile然后.save()成outfile,如果报错则说明不能转换格式。
其中关于os.path.splitext(“文件路径”) 作用是分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作 f,e = os.path.splitext(infile),将文件名给f,后缀给e。
四、创建缩略图.thumbnail()
from PIL import Image
im = Image.open(r'C:\Users\Administrator\Desktop\picture\sucai.jpg')
im.thumbnail((400,400))#生成缩略图并保存在im中
im.save('C:/Users/Administrator/Desktop/picture/sucai.jpg')#保存.save(‘path')
五、复制和粘贴图像区域.crop()和.paste()
裁剪操作
box = (100,100,300,300)#上下左右四个像素位置,确定框框
region = im.crop(box)#裁剪出来赋给region
region.show()
可以旋转上面代码中获取的区域,然后使用paste()方法将该区域放回去:
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
六、调整尺寸和旋转.resize()和.rotate()
out = im.resize((128,128))
out = im.rotate(45)#逆时针方向旋转
七、图像滤波与图像增强
图像滤波在ImageFilter 模块中;图像增强也是图像预处理中的一个基本技术,Pillow中的图像增强函数主要在ImageEnhance模块下,通过该模块可以调节图像的颜色、对比度和饱和度和锐化等
关于图像滤波与增强部分