Image to Char 图片转字符 | PIL的简单应用 灰度图

from PIL import Image
import numpy as np
### Image to Char 图片转字符
if __name__ == '__main__':
    image_file = 'son.png'
    height = 100 # 规定转化出来的‘字符图片’的高度为100
    # PIL.Image包;PIL图像处理基础包,OPENCV图像处理强化包
    img = Image.open(image_file)
    img_width, img_height = img.size # 图像的宽度和高度(对应一般意义上的长和宽)
    print(img_width, img_height)
    width = int(2 * height * img_width // img_height) # 字符图片宽度,取整
    img = img.resize((width, height), Image.ANTIALIAS) # 自定义字符图片的宽度和高度,Image.ANTIALIAS抗锯齿
    # pixels 像素点
    # PIL-convert()函数
    pixels = np.array(img.convert('L')) # 将彩色图片转化成灰度图
    # L为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。
    # 在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
    # L = R * 299 / 1000 + G * 587 / 1000 + B * 114 / 1000
    print(pixels.shape) # 得到的*矩阵*形状为(height, width)
    print(pixels)
    chars = "MNHQ$OC?7>!:-;. " # 最后一个是空格;按照自己的感官,从最黑到最白排序,共16个
    N = len(chars)
    step = 256 // N # 0~255种灰度,256//16=16,第0~15用M显示,第16~31用N表示·····
    result = '' # 字符图片其实就是一个非常庞大的字符串
    for i in range(height): # 行
        for j in range(width): # 列
            result += chars[pixels[i][j] // step]
        result += '\n' # 每处理完一行要进行换行操作
    with open('text.txt', mode='w') as f: # 使用with不需要f.close()
        f.write(result) # 将字符图片写入到text.txt中显示)
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务