PIL模块学习
Image模块
1 2 3
| im = Image.open('BG.png') im.show() print(im.format, im.size, im.mode,im.getbands(),im.info)
|
mode
mode |
描述 |
1 |
1位像素,黑和白,存成8位的像素 |
L |
8位像素,黑和白 |
P |
8位像素,使用调色板映射到任何其他模式 |
RGB |
3*8位像素,真彩 |
RGBA |
4*8位像素,真彩+透明通道 |
CMYK |
4*8位像素,颜色隔离 |
YCbCr |
3*8位像素,颜色视屏格式 |
I |
32位整型像素 |
F |
32位浮点型像素 |
convert
如果是把彩图变成黑白图,会遵循如下公式:
$$
L = R * 299/1000 + G * 587/1000 + B * 114/1000
$$
new
1 2
| n_im = Image.new("RGB",(128,128),"#FF00FF") n_im.show()
|
copy
crop
1
| im.crop((100,100,500,500)).show()
|
返回(x,y)到(x1,y1)的图片
paste
1 2
| im.paste(newim,(200,200)) im.show()
|
把一张图粘贴到另一张图的(x,y)处(如果没写默认(0,0))
Fliter
1 2 3 4 5 6
| a = im.filter(ImageFilter.BLUR) b = im.filter(ImageFilter.CONTOUR) c = im.filter(ImageFilter.FIND_EDGES) a.show() b.show() c.show()
|
- 预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测
Blend
1 2
| d = Image.blend(a, b, 0.2) d.show()
|
设定alpha(透明度)的值,然后混合两张图
$$
合成公式为:out = image1 (1.0 - alpha) + image2 alpha
$$
split
1 2
| e,f,g,h = im.split() e.show()
|
返回当前图像各个通道组成一个元组,如上RBGA图像返回(‘R’,’B’,’G’,’A’)的四个图像
composite
使用给定的两张图像及mask图像作为透明度,插值出一张新的图像
1 2
| r,g,b = im1.split() im = Image.composite(im1,im2,b)
|
eval
1 2
| e = Image.eval(im, lambda x: x*0.9) e.show()
|
使用函数对图像的每一个像素点处理一次,如果图像有多个通道,那么函数就作用与每一个通道。注意:函数会对每一个像素处理一次,所以不能用随机组件或其他生成器
- 图像的通道:如在RBG色彩模式下就是值那单独的红绿蓝部分,一个完整的图像由红绿蓝三个通道组成,共同产生完整的图像
merge
1 2 3 4
| f = im.split() neww = [f[0],f[1],f[1]] h = Image.merge("RGB",neww) h.show()
|
合并各个单通道