兴趣-Image
PIL有九种不同模式:
1: 1位像素,黑白,每字节一个像素存储
L: 8位像素,黑白
P: 8位像素,使用调色板映射到任何其他模式
RGB: 3x8位像素,真彩色
RGBA: 4x8位像素,带透明度掩模的真彩色
CMYK: 4x8位像素,分色
YCbCr: 3x8位像素,彩色视频格式
I: 32位有符号整数像素
F: 32位浮点像素
1. 导包
from PIL import Image
2. 选择图片并灰度处理
img=Image.open("image_file")
3.可以选择调整图片大小,可调可不调
height=100 //设置最大高度
img_width,img_height=img.size
width=int(1.8*height*img_width//img_height)
img=img.resize((width,height),Image.ANTIALIAS)=
img.convert('L') //灰度,还可以1 ,L/RGB 0(black) 255(white) RGBA P I...
4.提取灰度后的变成numpy array
img.show() //展示一下
pixels=np.array(img) //结果为0-256的width*heigh的二维数组
chars="MNHQ$OC?7>!:-;. " //填充字符,可以随便设置,最好索引越大字符越不明显,索引越小字符越明显
step=256//(len(chars)-1)
5.写入文件
with open('imageTotxt.txt',mode='w+') as f:
for i in range(height):
result=''
for j in range(width):
try:
result+=chars[pixels[i][j]//step]
except Exception:
print("error:"+str(pixels[i][j]//step))
f.write(result+"\n")
完整代码
from PIL import Image
import numpy as np
if __name__ == "__main__":
image_file='''d:\User\Pictures\\aliPan\\beng1.png'''
height=100
img=Image.open(image_file)
img_width,img_height=img.size
width=int(1.8*height*img_width//img_height)
img=img.resize((width,height),Image.ANTIALIAS)
imgs=img.convert('L')
pixels=np.array(imgs)
# imgs.show()
print('type(pixels=',type(pixels))
print(pixels.shape)
print(pixels)
chars="WRELOVYOU7C>!:-;. "
N=len(chars)
step=256//N
with open('imageTotxt.txt',mode='w+') as f:
for i in range(height):
result=''
for j in range(width):
try:
result+=chars[pixels[i][j]//step]
except Exception:
print("error:"+str(pixels[i][j]//step))
f.write(result+"\n")