一、安装
- 被认为是python官方图像处理库
- PIL非常适合于图像归档以及图像的批处理任务。可以使用PIL创建缩略图,转换图像格式,打印图像等等
- PIL支持众多的GUI框架接口,可以用于图像展示
- PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换
1
|
pip install Pillow |
二、打开图片
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) im.show() |
三、转换格式并保存
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) im.save( "result.png" ) |
四、创建缩略图
1
2
3
4
5
|
from PIL import Image im = Image. open ( "picture.jpg" ) im.thumbnail(( 128 , 128 )) im.save( "result.jpg" ) |
五、获取图片属性
- 获取图像的来源,如果图像不是从文件读取它的值就是None。
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im. format ) |
六、图片信息
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.info) |
七、调色板
- 如果图像的模式是“P”,则返回Image Palette类的实例;否则,将为None
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.palette) |
八、画板
- 使用给定的变量mode和size生成画板
1
2
3
4
|
from PIL import Image im = Image.new( "RGB" , ( 128 , 128 ), "#FF0000" ) im.show() |
九、图片模式
- 图像的模式,常见如下
- L:8位像素,黑白
- P:9位像素,使用调色板映射到任何其他模式
- 1:1位像素,黑白图像,存成8位像素
- RGB:3*8位像素,真彩
- RGBA:4*8位像素,真彩+透明通道
- CMYK:4*8位像素,印刷四色模式或彩色印刷模式
- YCbCr:3*8位像素,色彩视频格式
- I:32位整型像素
- F:33位浮点型像素
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.mode) |
十、模式转换
- 将当前图像转换为其他模式,并且返回新的图像
1
2
3
4
5
6
|
from PIL import Image im = Image. open ( "picture.jpg" ) new_im = im.convert( 'L' ) print (new_im.mode) new_im.show() |
十一、矩阵模式转换
- 使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像
1
2
3
4
5
6
7
8
9
10
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.mode) matrix = ( 0.412453 , 0.357580 , 0.180423 , 0 , 0.212671 , 0.715160 , 0.072169 , 0 , 0.019334 , 0.119193 , 0.950227 , 0 ) new_im = im.convert( "L" , matrix) print (new_im.mode) new_im.show() |
十二、图片尺寸
- 获取图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组
1
2
3
4
5
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.size) |
十三、通道分离
- 返回当前图像各个通道组成的一个元组
- 分离一个 RGB 图像将产生三个新的图像
- 分别对应原始图像的每个通道红、绿、蓝三张图片
1
2
3
4
5
6
7
8
|
from PIL import Image im = Image. open ( "picture.jpg" ) r,g,b = im.split() print (r.mode) print (r.size) print (im.size) |
十四、复制、裁剪、粘贴、合并
1
2
3
4
5
6
7
8
9
10
11
|
from PIL import Image im = Image. open ( "picture.jpg" ) # 复制 im.copy() # 裁剪 im.crop(( 100 , 100 , 400 , 400 )) # 将一张图粘贴到另一张图像上 im.paste(im.transpose(Image.ROTATE_180),im) # 合并类使用一些单通道图像,创建一个新的图像 Image.merge( "RGB" , im.split()) |
十五、几何变换
- Image类有resize()、rotate()和transpose()、transform()方法进行几何变换
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from PIL import Image im = Image. open ( "picture.jpg" ) # 修改尺寸 im.resize(( 128 , 128 )) # 角度旋转 im.rotate( 45 ) # 返回当前图像的翻转或者旋转的拷贝 # 值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,ROTATE_270 im.transpose(Image.ROTATE_90) # 用给定的尺寸生成一张新的图像,与原图有相同的模式 im.transform(( 200 , 200 ), Image.EXTENT, ( 0 , 0 , 300 , 300 )) |
十六、高级图片处理
-
使用
ImageEnhance
对象就能快速地进行设置。 可以调整对比度、亮度、色平衡和锐利度
1
2
3
4
5
6
|
from PIL import Image from PIL import ImageEnhance im = Image. open ( "picture.jpg" ) enh = ImageEnhance.Contrast(im) enh.enhance( 1.3 ).show( "30% more contrast" ) |
十七、滤波器处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from PIL import Image from PIL import ImageFilter im = Image. open ( "picture.jpg" ) # 均值滤波 im1 = im. filter (ImageFilter.BLUR) # 找轮廓 im2 = im. filter (ImageFilter.CONTOUR) # 边缘检测 im3 = im. filter (ImageFilter.FIND_EDGES) im.show() im1.show() im2.show() im3.show() |
十八、设置透明度合成两张图
- 使用给定的两张图像及透明度变量alpha,生成一张新的图像
- 变量alpha值在0和1之间
- 若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回第二张图像的拷贝。
1
2
3
4
5
6
|
from PIL import Image im1 = Image. open ( "picture1.jpg" ) im2 = Image. open ( "picture2.jpg" ) im = Image.blend(im1, im2, 0.30 ) im.show() |
十九、设置模式合成两张图
- 使用给定的两张图像及mask图像作为透明度,生成一张新的图像
- 图像的模式可以为“1”,“L”或者“RGBA”
- 所有图像必须有相同的尺寸
1
2
3
4
5
6
|
from PIL import Image im1 = Image. open ( "picture1.jpg" ) im2 = Image. open ( "picture2.jpg" ) im = Image.composite(im1, im2, 'L' ) im.show() |
二十、草稿模式
- 速度要求比质量高的场合
- 允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效
1
2
3
4
5
6
7
8
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.size,im.mode) new_im = im.draft( "L" , ( 200 , 200 )) print (new_im.size,new_im.mode) new_im.show() |
二十一、获取通道名称
- 返回包括每个通道名称的元组
- 例如,对于RGB图像将返回(“R”,“G”,“B”)
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.getbands()) |
二十二、获取包围盒
- 计算图像非零区域的包围盒
- 这个包围盒是一个4元组,定义了左、上、右和下像素坐标
- 如果图像是空的,这个方法将返回空
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.getbbox()) |
二十三、获取像素值
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.getdata()) |
二十四、获取图片极值
- 返回一个2元组
- 包括该图像中的最小和最大值
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.getextrema()) |
二十五、指定位置像素值
1
2
3
4
|
from PIL import Image im = Image. open ( "picture.jpg" ) print (im.getpixel(( 10 , 0 ))) |
二十六、获取图像直方图
1
2
3
4
5
|
from PIL import Image im = Image. open ( "picture.jpg" ) im_histogram = im.histogram() print (im_histogram[ 0 ]) |
二十七、内存分配
- 为图像分配内存并从文件中加载它
- 返回一个用于读取和修改像素的像素访问对象
1
2
3
4
5
|
from PIL import Image im = Image. open ( "picture.jpg" ) pix = im.load() print (pix[ 0 , 2 ]) |
二十八、查找指定的帧
- 给定的动态图中查找指定的帧
- 如果查找超越了序列的末尾,则产生一个EOFError异常
- 当文件被打开时,PIL库自动指定到第0帧上
1
2
3
4
5
6
7
8
9
10
|
from PIL import Image im_gif = Image. open ( "loading.gif" ) print (im_gif.mode) # 默认打开时是第0帧 im_gif.show() im_gif.seek( 1 ) im_gif.show() im_gif.seek( 3 ) im_gif.show() |
二十九、获取当前帧位置
1
2
3
4
5
6
|
from PIL import Image im_gif = Image. open ( "loading.gif" ) print (im_gif.tell()) im_gif.seek( 3 ) print (im_gif.tell()) |
到此这篇关于python 包之 Pillow 图像处理教程分享的文章就介绍到这了,更多相关python Pillow 图像处理内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.51cto.com/autofelix/5191379