Python实现图片转化为字符图(附完整代码)

工作原理:

先将图片每个像素的hsv(色相,饱和度,明度)值转化为可读取对象,使用到PIL的Image方法:

from PIL import Image

img = Image.open('test.png')
hsv = img.convert('HSV').load()

再将图像按v用取平均值的方法进行压缩,最后根据压缩后图像的每个像素点的v值转换成字符进行输出

运行效果:

原图:

 

转化后:

Python实现图片转化为字符图(附完整代码)_第1张图片

 

完整代码:

scale表示图片的压缩倍率,压缩后图像的宽度和高度都为原图的除以scale

fit_table表示转化后的图片由哪些字符构成,按明度从低到高排列,长度应在1-255之间,长度越长图像对比度越高,画质越好

from PIL import Image
from math import ceil

# 图片压缩倍率
scale = 1

# 获取图像hsv
img = Image.open('test.png')
hsv = img.convert('HSV').load()
new_img = [[0 for i in range(ceil(img.width / scale))] for x in range(ceil(img.height / scale))]

# 图像压缩
for x in range(0, img.width, scale):
    for y in range(0, img.height, scale):
        _v = 0
        num = 0
        for x1 in range(scale):
            for y1 in range(scale):
                if x + x1 < img.width and y + y1 < img.height:
                    _v += hsv[x + x1, y + y1][2]
                    num += 1
        new_img[y // scale][x // scale] = _v // num

# 转化字符(明度从低到高排列)
fit_table = ['魍', '恼', '且', '不', '一']
text = ''

# 转文本
for y in new_img:
    for x in y:
        text += fit_table[x // (255 // len(fit_table) + 1)]
    text += '\n'
print(text)

 

你可能感兴趣的:(python,图像处理)