PIL库学习总结:
PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储、显示和处理,能够处理几乎所有格式的图片。
一、PIL库简介
(一)两个主要功能:
(1) 图像归档:对图像进行批处理、生产图像预览、图像格式转换等。
(2) 图像处理:图像基本处理、像素处理、颜色处理等。
(二)PIL拥有多个类,下面对其中的Image类、ImageFilter类、ImageEnhance类做简单介绍。
二、使用库函数Image类 —— 基本图像处理
(一) 调用Image类:
from PIL import Image
(二) Image类关于图像读取与创建:
方法 |
说明 |
Image.open(filename) |
加载图像文件 |
Image.new(mode,size,color) |
根据给定参数创建新图像 |
Image.open(StringIO.StringIO(buffer)) |
从字符串中获取图像 |
Image.frombytes(mode,size,color) |
根据像素点创建新图像 |
Image.verify() |
对图像完整性进行检查,返回异常 |
1 from PIL import Image 2 im = Image.open('test1.jpg') # 读取图片 3 im.show() # 可视化
(三)Image类的常用属性:
方法 |
说明 |
Image.format |
图像格式或来源,若图像不是从文件读取,返回None |
Image.mode |
图像的色彩模式,’L’为灰度模式,’RGB’为真彩色图像,’C(青)M(品红)Y(黄)K(黑)’为出版图像 |
Image.size |
图像的宽度和高度,单位是像素(px),返回值为元组类型 |
Image.palette |
调色板属性,返回ImagePalette类型 |
1 from PIL import Image 2 im = Image.open("日落.jpg") 3 print(im.format,im.mode,im.size,im.palette)
程序执行效果如下:
(四)Image类的序列图像操作方法:
方法 |
说明 |
Image.seek(frame) |
跳转并返回图像中的指定帧 |
Image.tell() |
返回当前帧的序号 |
(五)Image类的图像旋转和缩放方法:
方法 |
说明 |
Image.resize(size) |
返回按size大小调整图像的副本 |
Image.rotate(angle) |
返回按angle角度旋转图像的副本 |
(六)Image类的图像转换和保存方法:
方法 |
说明 |
Image.save(filename,format) |
将图像保存为filename文件名,format格式 |
Image.convert(mode) |
将图像转换为mode模式 |
Image.thumbnail(size) |
创建图像的缩略图,size是缩略图尺寸的元组 |
1 from PIL import Image 2 im = Image.open("学校.jpg") 3 r,g,b = im.split() #获取原图的RGB通道的颜色值 4 newb = b.point(lambda i:i*1.1) #将B通道的颜色值增强 5 im1 = Image.merge(im.mode,(b,g,r)) 6 im1.thumbnail((400,254)) #创建缩略图 7 im1.save("学校.jpg")
(七)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类 —— 图像过滤
(一)调用ImageFilter类
from PIL import ImageFilter
(二)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 |
图像的锐化效果 |
四、使用库函数ImageEnhance类 —— 图像增强
(一)调用ImageEnhance类
from PIL import ImageEnhance
(二)ImageEnhance类图像增强与滤镜方法
方法 |
说明 |
ImageEnhance.enhance(factor) |
对所选属性的数值增强factor倍 |
ImageEnhance.Color(im) |
调整图像的颜色平衡 |
ImageEnhance.Contrast(im) |
调整图像的对比度 |
ImageEnhance.Brightness(im) |
调整图像的亮度 |
ImageEnhance.Sharpness(im) |
调整图像的锐度 |
1 from PIL import Image 2 from PIL import ImageEnhance 3 gz = Image.open("日落.jpg") 4 gz1 = ImageEnhance.Brightness(gz) #选择亮度 5 gz1.enhance(2).save("日落.jpg") #将亮度增强2倍后保存
GIF的制作:
1 import imageio 2 savename = "Jerry.gif" 3 filenames = ["1.png","2.png","3.png","4.png","5.png","7.png","6.png","8.png","9.png","10.png"] 4 frames = [] 5 for name in filenames: 6 frames.append(imageio.imread(name)) 7 imageio.mimsave(savename,frames,'GIF',duration=1)