python—PIL库图像处理

  • 2019 年 10 月 8 日
  • 笔记

这里主要说的是PIL, PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。 PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow

所以直接给你电脑安装pillow就可以使用了

pip install pillow

首先先获取图片,然后对图片修改尺寸。

图片原图:

代码:

from PIL import Image  image = Image.open('lufei.png')  image = image.resize((150, 200), Image.ANTIALIAS)  print(type(image))

将图片转换为灰度值图像用convert函数:

代码:

from PIL import Image  image = Image.open('lufei.png')  m = image.convert('L')  m.show()

效果:

将图片保存则用save函数:

m.save('lefei.png')

如果想将灰度值还原为rgb的格式,只需要底下在写一条句子,将L换成RGB

将灰度值反相,可以得到一种不一样的效果,将灰度值转为矩阵,再用255-去矩阵的数值,接着用fromarray函数还原成Image的格式。

from PIL import Image  import numpy as np  image = Image.open('lufei.png')  im = image.convert('L')  m = np.array(im)  m = 255-m  img =Image.fromarray(m)  img.show()

将图片的颜色通道分离用split函数:

from PIL import Image  image = Image.open('lufei.png')  image.show()  r,g,b = image.split()  r.show()  g.show()  b.show()

将图片的颜色通道合并用merge函数:

from PIL import Image  image = Image.open('lufei.png')    r,g,b = image.split()  im_merge = Image.merge("RGB",[b,g,r])  im_merge.show()

不同的rgb排列方式会得到不同的颜色效果

对图片的像素操作,强化像素的效果:

左边为像素值*1.5,中间原图,右边*2.5的效果比较

point()函数:

from PIL import Image  image = Image.open('lufei.png')  im_point = image.point(lambda x:x*2.5)  im_point.show()

小应用:

利用python做一个图像转字符串,并保存到文本之中。

首先导入PIL库和numpy库

读取图片,并将图片重新调整大小,接着转换为矩阵,转换为矩阵的时候,

矩阵是一个(x,y,z)的数据,x和y是他的长和宽,然后z是他的rgb数值,0就是r,1就是g,2就是b。

然后定义一个数值转换为字符的字符表备用

接着做一个转换函数,按一定比例,将一定的rgb数据转为特定字符,接着再利用之前获取到的矩阵的长度和宽度,获取矩阵的像素的rgb数据,传给转换函数C,再将获得到的字符串写入文本文件即可

from PIL import Image  import numpy as np  image = Image.open('lufei.png')  image = image.resize((150, 200), Image.ANTIALIAS)  img = np.array(image)  x = np.shape(img)  W = x[0]  H = x[1]  C_char = list(" 0")  def C(r,g,b):      leng = len(C_char)      g = int(0.2126 * r + 0.7152 * g + 0.0722 * b)      u = (256.0+1)/leng      return C_char[int(g/u)]  t = ''  for i in range(W):      for j in range(H):          r = img[i][j][0]          g = img[i][j][1]          b = img[i][j][2]          t+=C(r,g,b)          t+='  '      t+='n'  txt = open('w.txt','w')  txt.write(t)