Python PIL
PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储、显示和处理,能够处理几乎所有格式的图片。
一、PIL库简介
1. PIL库主要有2个方面的功能:
(1) 图像归档:对图像进行批处理、生产图像预览、图像格式转换等。
(2) 图像处理:图像基本处理、像素处理、颜色处理等。
2. PIL拥有多个类,此处就其中的Image类、ImageFilter类、ImageEnhance类做简单介绍。
二、安装库函数
pip install pillow
三、使用库函数Image类 —— 基本图像处理
1. 调用Image类
from PIL import Image
2. Image类关于图像读取与创建
方法
说明
Image.open(filename)
加载图像文件
Image.new(mode,size,color)
根据给定参数创建新图像
Image.open(StringIO.StringIO(buffer))
从字符串中获取图像
Image.frombytes(mode,size,color)
根据像素点创建新图像
Image.verify()
对图像完整性进行检查,返回异常
例子:
from PIL importImage
im=Image.open("D:\\python\\1.jpg")
im.show()
3. Image类的常用属性
方法
说明
Image.format
图像格式或来源,若图像不是从文件读取,返回None
Image.mode
图像的色彩模式,’L’为灰度模式,’RGB’为真彩色图像,’C(青)M(品红)Y(黄)K(黑)’为出版图像
Image.size
图像的宽度和高度,单位是像素(px),返回值为元组类型
Image.palette
调色板属性,返回ImagePalette类型
例子:
from PIL importImage
im=Image.open("D:\\python\\1.jpg")print(im.format,im.size,im.mode)
4.Image类的序列图像操作方法
方法
说明
Image.seek(frame)
跳转并返回图像中的指定帧
Image.tell()
返回当前帧的序号
5.Image类的图像旋转和缩放方法
方法
说明
Image.resize(size)
返回按size大小调整图像的副本
Image.rotate(angle)
返回按angle角度旋转图像的副本
例子:
from PIL importImage
im=Image.open("D:\\python\\1.jpg")#读取图像
print(im.format,im.size,im.mode)#读取图像文件的属性
im.show()
im_resized= im.resize((300, 200)) #原图像缩放为500x400
im_resized.show()
6.Image类的图像转换和保存方法
方法
说明
Image.save(filename,format)
将图像保存为filename文件名,format格式
Image.convert(mode)
将图像转换为mode模式
Image.thumbnail(size)
创建图像的缩略图,size是缩略图尺寸的元组
Example_1:
from PIL import Image
nest = Image.open("D:\\python\\1.jpg")
r,g,b = nest.split() #获取原图的RGB通道的颜色值
newb = b.point(lambda i:i*1.1) #将B通道的颜色值增强
nest1 = Image.merge(nest.mode,(b,g,r))
nest1.save("D:\\python\\1-1.jpg")
原图与效果图对比:
7.Image类的图像像素和通道处理方法
方法
说明
Image.point(func)
根据函数func的功能对每个元素进行运算,返回图像副本
Image.split()
根据GRB图像的每个颜色通道,返回图像副本
Image.merge(mode,bands)
合成通道,其中mode为色彩,bands为新的色彩通道
Image.blend(im1,im2,alpha)
将2张图片im1和im2按照公式插值后生成新图像
公式:im1*(1.0 - alpha) + im2*alpha
四、使用库函数ImageFilter类 —— 图像过滤
1.调用ImageFilter类
from PIL import ImageFilter
2. ImageFilter类预定义图像过滤方法
方法
说明
ImageFilter.BLUR
图像的模糊效果
ImageFilter.CONTOUR
图像的轮廓效果
ImageFilter.DETAIL
图像的细节效果
ImageFilter.EDGE_ENHANCE
图像的边界加强效果
ImageFilter.EDGE_ENHANCE_MORE
图像的阈值边界加强效果
ImageFilter.EMBOSS
图像的浮雕效果
ImageFilter.FIND_EDGES
图像的边界效果
ImageFilter.SMOOTH
图像的平滑效果
ImageFilter.SMOOTH_MORE
图像的阈值平滑效果
ImageFilter.SHARPEN
图像的锐化效果
Example_2:
from PIL import Image
from PIL import ImageFilter
im=Image.open("D:\\python\\10.jpg")#读取图像
om=im.filter(ImageFilter.CONTOUR)
om.save("D:\\python\\10.jpg")
im.show()
效果图:
五、使用库函数ImageEnhance类 —— 图像增强
1. 调用ImageEnhance类
from PIL import ImageEnhance
2.ImageEnhance类图像增强与滤镜方法
方法
说明
ImageEnhance.enhance(factor)
对所选属性的数值增强factor倍
ImageEnhance.Color(im)
调整图像的颜色平衡
ImageEnhance.Contrast(im)
调整图像的对比度
ImageEnhance.Brightness(im)
调整图像的亮度
ImageEnhance.Sharpness(im)
调整图像的锐度
例子:
from PIL importImagefrom PIL importImageEnhance
im=Image.open("D:\\python\\10.jpg")#读取图像
om=ImageEnhance.Contrast(im)
om.enhance(10).save('D:\\python\\10.jpg')
im.show()
六、提取图像每一帧
Image还能读取序列类图像文件,包括 gif / fli / flc / tiff 等文件格式。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法在不同帧之间的移动:
//Image类的序列图像操作处理
方法
描述
Image.seek(frame)
跳转并返回图像中的指定帧
Image.tell()
返回当前帧的序列
from PIL importImage
im=Image.open("D:\\python\\可爱.GIF")try:
im.save('picframe{:02}.png'.format(im.tell()))whileTrue:
im.seek(im.tell()+1)
im.save('picframe{:02}.png'.format(im.tell()))except:print("处理异常")