0%

PIL模块学习

PIL模块学习

Image模块

open,show,save,format,size,mode,getbands,info

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

1
newim = im.convert('1')   #将图像转化为1模式

如果是把彩图变成黑白图,会遵循如下公式:
$$
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

1
im_copy = im.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()             ##分离出r,g,b
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()

合并各个单通道