这里主要说的是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)