python图像处理
详见文档Pillow:Python-Imaging-Library这里使用的是Image模块
图像属性
format属性
string or None
标识了图像格式,如果图像不是从文件读取它的值就是None
mode属性
string
注:如果一个图片的颜色格式为srgb,则说明这张图片存储的颜色值是encoder gamma之后的颜色值
sRGB标准:
-
人眼对亮度的感知不是线性的, 其对较暗区域的变化更加敏感,参见 Computer Color is Broken
-
基于人眼该特点,sRGB标准要求图像(各通道为8bits,最多存储256个亮度值)使用encoder gamma,把更多的空间用来存储更多暗部区域,来最大化地利用表示亮度的数据位或带宽。
size属性
(width,height)
图像的尺寸,按照像素数计算
palette属性
palette or None
颜色调色板表格,只对模式为"P"的图像返回Image Palette
info属性
dictionary
存储图像相关数据的字典
1 | from PIL import Image |
PNG
RGBA
(1920, 1200)
None
{'srgb': 0, 'gamma': 0.45455, 'dpi': (119.9896, 119.9896)}
构建图像
Image.open(fp,mode)
1 | from PIL import Image |
需要知道的是在win的环境下im.show的方式为win自带的图像显示应用。打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。
Image.new(mode,size,color=0)
1 | from PIL import Image,ImageColor |
Image.fromarray(obj,mode=None)
- obj-数组接口对象
- mode-不自动判断
1 | from PIL import Image |
1 | from PIL import Image |
[[223. 222.66666667 222. ... 240.66666667 240.66666667
240.66666667]
[222.66666667 222.66666667 221.66666667 ... 240.66666667 241.
240.66666667]
[222.33333333 221.66666667 221.33333333 ... 240.66666667 240.66666667
240.33333333]
...
[120.33333333 118.33333333 145.66666667 ... 216.66666667 189.
189.33333333]
[119. 133.33333333 166. ... 205. 188.
190. ]
[125.33333333 162.66666667 163. ... 196.33333333 188.33333333
190. ]]
输出如下:

图像处理
图像混合
透明度混合 Image.blend(im1,im2,alpha)
- im1:Image对象,透明度为(1-alpha)
- im2:Image对象,透明度为(alpha)
- alpha:透明度(0~1).
注意:im1和im2的大小必须一样,且模式为RGB
1 | from PIL import Image |
效果如下图所示:

遮罩混合 Image.composite(im1,im2,mask)
- 均为Image对象,使用mask来混合im1和im2
- 这里三个Image对象的size和mode都必须相同
1 | from PIL import Image |
RGB
RGB
(3840, 2160)
(3840, 2160)
效果如下图所示:


图像缩放
按像素缩放 Image.eval(im,fun)
- 第一个为Image对象
- 第二个为一个方法(函数),该函数传入一个参数,即像素点。
- 该函数会对图片中每个像素点进行函数内的操作
1 | from PIL import Image |
效果如下图所示:(1倍/1.5倍/2倍)

按尺寸缩放 Image.thumbnail()
- 不同于前面直接通过Image调用方法,而是使用Image的具体实例im调用thumbnail方法
- 这里缩放图像并不会对图像进行变形,即显示效果是一样的。
1 | from PIL import Image |
im1的大小 (2156, 3291)
im2的大小 (671, 1024)
图像的剪切与粘贴
图像粘贴 Image.paste(im,box,mask=None)
- Image的具体实例调用方法
- im为Image对象,box为要粘贴的区域,mask为遮罩。
- box参数有三种形式:
- (x1,y1):将im左上角对齐(x1,y1)点,其余部分粘贴,剩余部分抛弃
- (x1,y1,x2,y2):将im粘贴至此区域
- None:此时im必须与原图像大小一致
图像剪裁 Image.crop(box)
1 | from PIL import Image |
效果如图所示:
其他
转换图像格式
将.png转换为.jpg,注意:不能将RGBA转化为.jpg
1 | from PIL import Image |
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=1920x1080 at 0x255C7FE22E0>
JPEG (1920, 1080) RGB
