PIL(Python Image Library)库是Python语言的第三方库,支持图像存储、显示和处理,能处理几乎所有图片格式
函数 | 描述 |
---|---|
Image.open(filename) | 根据参数加载图像文件 |
Image.new(mode, size, color) | 根据给定参数创建一个新的图像 |
Image.open(StringIO.StringIO(buffer) | 从字符串中获取图像 |
Image.frombytes(mode, size, data) | 根据像素点data创建图像 |
Image.verify() | 对图像文件完整性进行检查,返回异常 |
加载一个图像,最简单的形式如下,后续操作对im起作用
>>>from PIL import Image
>>>im = open("baymax.jpg")
FileNotFoundError Traceback (most recent call last)
in
1 from PIL import Image
----> 2 im = open("baymax.jpg")
FileNotFoundError: [Errno 2] No such file or directory: 'baymax.jpg'
由于图片路径和程序不在同一个路径中,因此出现FileNotFound
>>>from PIL import Image
>>>im = Image.open(r"C:\Users\acer\Desktop\baymax.jpg")
属性 | 描述 |
---|---|
Image.format | 标识图像格式或来源,如果图像不是从文件读取,值为None |
Image.mode | 图像的色彩模式,“L”为灰度图像、“RGB”为真彩色图像、“CMYK”为出版图像 |
Image.size | 图像宽度和高度,单位是像素(px),返回值为tuple |
Image.palette | 调色板属性,返回一个ImagePalette类型 |
>>>print(im.format,im.size,im.mode)
JPEG (1438, 1279) RGB
方法 | 描述 |
---|---|
Image.seek(frame) | 跳转并返回图像中的指定帧 |
Image.tell() | 返回当前帧的序号 |
可以通过seek和tell组合查看GIF图像的每一帧
方法 | 描述 |
---|---|
Image.save(filename, format) | 将图像保存为filename文件名,format格式 |
Image.convert(mode) | 使用不同的参数,转换图像为新的模式 |
Image.thumbnail(size) | 创建图像的缩略图,size是缩略图尺寸的二元元组 |
im.thumbnail((256,256))
im.save(r"C:\Users\acer\Desktop\baymax_TN.jpg")
方法 | 描述 |
---|---|
Image.resize(size) | 按size大小调整图像,生成副本 |
Image.rotate(angle) | 按angle角度旋转图像,生成副本 |
im.rotate(30)
方法 | 描述 |
---|---|
Image.point(func) | 根据func的功能对每个元素进行计算,返回图像副本 |
Image.split() | 提取RGB图像的每个颜色通道,返回图像副本 |
Image.merge(mode, bands) | 合并通道,其中mode表示色彩,bands表示新的色彩通道 |
Image.blend(im1, im2, alpha) | 将两幅图片im1和im2按照如下公式插值后生成新的图像:im1 * (1.0-alpha) + im2 * alpha |
#颜色交换
r, g, b = im.split()
om = Image.merge("RGB", (b, g, r))
om.save(r"C:\Users\acer\Desktop\baymax_BGR.jpg")
#去掉图片的光线
r, g, b = im.split()
newg = g.point(lambda i: i * 0.9)#将G通道颜色值变为原来0.9倍
newb = b.point(lambda i: i < 100)#选择B通道值低于100的像素点
om = Image.merge(im.mode,(r, newg, newb))
om.save(r"C:\Users\acer\Desktop\baymax_Merge.jpg")
PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法
方法表示 | 描述 |
---|---|
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 | 图像的锐化效果 |
锐化(抽象)图片
from PIL import Image
from PIL import ImageFilter
om = im.filter(ImageFilter.CONTOUR)
om.save(r"C:\Users\acer\Desktop\baymax_Contour.jpg")
模糊图片
om = im.filter(ImageFilter.BLUR)
om.save(r"C:\Users\acer\Desktop\baymax_Blur.jpg")
om = im.filter(ImageFilter.EMBOSS)
om.save(r"C:\Users\acer\Desktop\baymax_Emboss.jpg")
方法 | 描述 |
---|---|
Image.Enhance.enhance(factor) | 对选择属性的数值增强factor倍 |
ImageEnhance.Color(im) | 调整图像的颜色平衡 |
ImageEnhance.Contrast(im) | 调整图像的对比度 |
ImageEnhance.Brightness(im) | 调整图像的亮度 |
ImageEnhance.Sharpness(im) | 调整图像的锐度 |
增强图像的对比度为初始的20倍
from PIL import ImageEnhance
om = ImageEnhance.Contrast(im)
om.enhance(20).save(r"C:\Users\acer\Desktop\baymax_Contrast20.jpg")
om = ImageEnhance.Brightness(im)
om.enhance(2).save(r"C:\Users\acer\Desktop\baymax_Brightness2.jpg")