基于灰度图的字符画的制作

编程入门 行业动态 更新时间:2024-10-08 18:36:46

基于<a href=https://www.elefans.com/category/jswz/34/1769417.html style=灰度图的字符画的制作"/>

基于灰度图的字符画的制作

媒体上经常会出现一些字符表示的图片,这段ASCII字符是用来形容每个像素点的颜色深浅,从视觉效果(灰度)来看,字符的越复杂越能形容深色,我们只需要获得一张图并将这张图转化为灰度图,然后遍历其中的像素点的灰度值,并根据灰度值转化为相应的ASCII字符,最后存入一个txt文件中即可。

代码如下:

# -*- coding: utf-8 -*-
from PIL import ImagecodeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''#生成字符画所需的字符集
count = len(codeLib)def transform1(image_file):image_file = image_file.convert("L")#转换为黑白图片,参数"L"表示黑白模式codePic = ''for h in range(0,image_file.size[1]):  #size属性表示图片的分辨率,'0'为横向大小,'1'为纵向for w in range(0,image_file.size[0]):gray = image_file.getpixel((w,h)) #返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组codePic = codePic + codeLib[int(((count-1)*gray)/256)]#建立灰度与字符集的映射codePic = codePic+'\r\n'return codePicdef transform2(image_file):codePic = ''for h in range(0,image_file.size[1]):for w in range(0,image_file.size[0]):g,r,b = image_file.getpixel((w,h))gray = int(r* 0.299+g* 0.587+b* 0.114)codePic = codePic + codeLib[int(((count-1)*gray)/256)]codePic = codePic+'\r\n'return codePicfp = open(u'./2.jpeg','rb')
image_file = Image.open(fp)
image_file=image_file.resize((int(image_file.size[0]*0.75), int(image_file.size[1]*0.5)))#调整图片大小
print (u'Info:',image_file.size[0],' ',image_file.size[1],' ',count)tmp = open('tmp.txt','w')
tmp.write(transform1(image_file))
tmp.close()

OpenCV的作用是实现图像从彩色到灰度图的转换

我们喂给程序一张图片:

运行程序:

得到输出文件:

查看字符图形效果:

灰度指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像。

生成字符画的字符集的设计是有根据的,如果把这个字符串看成一个数组,则数组前面的字符,对应于较小的灰度值,对应颜色偏黑,绘制出来的区域颜色深一些,而后面的字符,对应颜色偏白,绘制出来的区域颜色浅一些。

codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''

GIF动图转为字符动图:

# -*- coding: utf-8 -*-
import imageio
import cv2origin_pic='./a.gif'
target_pic='./b.gif'
codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''#生成字符画所需的字符集pics=imageio.mimread(origin_pic) #读取动态图,把动态图转换为一帧一帧的图像#应用上面定义好的图片灰度与字符的映射,把上面的每帧图片都转化为字符画,并保存在一个列表中
A=[]for img in pics:u,v,_=img.shapec=img*0+255gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)for i in range(0,u,6):for j in range(0,v,6):pix=gray[i,j]b,g,r,_=img[i,j]zifu=codeLib[int(((len(codeLib)-1)*pix)/256)]cv2.putText(c,zifu,(j,i),cv2.FONT_HERSHEY_COMPLEX, 0.3, (int(b),int(g), int(r)), 1)A.append(c)imageio.mimsave(target_pic, A, 'GIF',duration=0.1) #把A列表里的字符画组合起来,变成动态图
print('转化完成,请到你保存的路径下查看')

转化后的结果:

结束!

更多推荐

基于灰度图的字符画的制作

本文发布于:2024-03-09 07:16:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1724260.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:灰度   字符

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!