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)