#Python #字符画 #灰度图 使用Python绘制字符画及其原理
由于最近身体状况不太好所以更新会有点慢,请大家多多包涵。同时也提醒大家注意保重身体!
前提:默认大家已经正确安装了 Python,且正确将Python配置到了系统Path 。
目录
1.字符画的概况
![]()
使用字符画生成的龙猫 字符画,一种由字母、标点、汉字或其他字符组成的图画。简单的字符画是利用字符的形状代替图画的线条来构成简单的人物、事物等形象,它一般由人工制作而成;复杂的字符画通常利用占用不同数量的像素字符代替图画上不同明暗的点,它一般由程序制作而成。字符画是互联网时代的产物。
2. 实现原理
其实原理非常简单,首先,要准备一个字符集
char_set = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
其次,要将图片转成灰度图,所谓灰度图就是黑白照片,这个过程中还要缩小图片,每张图片缩小的比例都不尽相同,要根据图片的实际情况来决定,这样就得到了一张缩小后的黑白照片
im = Image.open('需要生成字符画图片的路径例如C:\XX\XX.png')
im = im.resize((80, 50), Image.ANTIALIAS)
im = im.convert('L') # 转为黑白图, 每个像素都一个灰度值,从0到255, 0是黑色, 255是白色
im.save('图片保存路径与想要的名称例如C:\XX\XX.jpeg') # 保存图片只是为了演示黑白照片
虽然看起来有一些丑陋,这张黑白照片一共有80*50个像素,每个像素点都可以通im.getpixel方法获得灰度值,这个值的范围是从0到255,0是黑色,255是白素,中间就是从黑到白的灰色。
接下来要做的事情就是把4000个灰度值转成字符
def get_char(gray):
if gray >= 240:
return ' '
else:
return char_set[int(gray/((256.0 + 1)/len(char_set)))]
灰度值大于240的,我都转成空字符串,这样看着舒服,其余的,按比例映射到字符集上。
强调一点,生成的txt文件不要打开查看,那样你看不到一个完整的字符画,在浏览器里打开字符画,这样才可以看到完整的,如果你把缩小的比例再放大一点,生成的字符画就会失去很多细节,一般来说,宽80就可以了,高度看情况调整。
3. 代码汇总
from PIL import Image
char_set = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
im = Image.open('需要生成字符画图片的路径例如C:\XX\XX.png')
im = im.resize((80, 50), Image.ANTIALIAS)
im = im.convert('L') # 转为黑白图, 每个像素都一个灰度值,从0到255, 0是黑色, 255是白色
im.save('t.jpeg')
def get_char(gray):
if gray >= 240:
return ' '
else:
return char_set[int(gray/((256.0 + 1)/len(char_set)))]
text = ''
for i in range(im.height):
for j in range(im.width):
gray = im.getpixel((j, i)) # 返回值可能是一个int, 也可能是一个三元组
if isinstance(gray, tuple):
gray = int(0.2126 * gray[0] + 0.7152 * gray[1] + 0.0722 * gray[2])
text += get_char(gray)
text += '\n'
with open('将字符画存入文本文档的路径例如C:\XX\XX.txt', 'w')as f:
f.write(text)
4.效果图
感谢您的阅读,如觉得有用请您点赞,您的鼓励是对我的最大动力!
END
2022/12/15
联系我:pengyu717@yeah.net
#Python #字符画 #灰度图 使用Python绘制字符画及其原理的更多相关文章
- Python中matplotlib.pyplot.imshow画灰度图的多种方法
转载:https://www.jianshu.com/p/8f96318a153f matplotlib库的教程和使用方法此处就不累赘了,网上有十分多优秀的教程资源.此处直接上代码: def demo ...
- python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)
最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...
- 【python】RGB图片到灰度图的转换
在做立体匹配求深度图的时候遇到这个问题,用惯了matlab的rgb2gray,倒是不熟悉python的实现,在网上找到了相关方案,记下来已作备用 RGB到灰度图转换公式: Y' = 0.299 R + ...
- 灰度图的直方图均衡化(Histogram Equalization)原理与 Python 实现
原理 直方图均衡化是一种通过使用图像直方图,调整对比度的图像处理方法:通过对图像的强度(intensity)进行某种非线性变换,使得变换后的图像直方图为近似均匀分布,从而,达到提高图像对比度和增强图片 ...
- 结合MATLAB、Python、R语言,在求得显著差异的边(节点对)之后,怎么画circle图
先来看看成果图: OK,开始画图: 实验背景声明:在脑影像分析中,我们首先构建脑网络,然 ...
- python学习---50行代码实现图片转字符画1
转自:https://blog.csdn.net/mm1030533738/article/details/78447714 项目链接: https://www.shiyanlou.com/cours ...
- python bmp转jpg 且灰度图转彩色
今天在简书,上看到了一个 bmp转jpg的代码,便记录一下. # coding:utf-8 import os from PIL import Image # bmp 转换为jpg,灰度图转RGB d ...
- python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)
############################################################################################# ###### ...
- Caffe python利用classify.py实现对单通道(灰度图)的数据进行分类
比如你在mnist的prototxt中定义图输入是单通道的,也就是channel=1,然后如果直接调用classify.py脚本来测试的话,是会报错,错误跟一下类似. Source param sha ...
- python显示灰度图
import matplotlib import matplotlib.pyplot as plt %matplotlib inline im=plt.imread('../lena.jpg', py ...
随机推荐
- 通过Python获取cpu、硬盘和主板等硬件序列号组成的唯一识别码
import wmi c = wmi.WMI() def yingpan(): # # 硬盘序列号 cc = "" for physical_disk in c.Win32_Dis ...
- Mybatis二级缓存(2)
10.3.一级缓存的原理 10.3.3 一级缓存的测试
- SQL server数据库中nvarchar和varchar的区别
先说结论: 存储内容含有汉字的使用nvarchar 存储内容全是英文没有汉字的使用varchar 1.varchar是非Unicode可变长度类型,nvarchar是Unicode可变长度类型. 2. ...
- 通过系统函数分配内存sbrk/sbrk
#include <unistd.h> #include <stdio.h> int main(void) { printf("================brk ...
- 连接Oracle 19c出现ORA-28040:没有匹配的验证协议
错误信息:ORA-28040:没有匹配的验证协议处理方法 出现这个原因是因为你的Oracle连接客户端与服务端Oracle的版本不匹配造成的.一般是低版本客户端连接高版本服务端出现. 高版本连接低版本 ...
- Dynamics CRM 安全模型的性能问题
性能问题对系统的影响可以是致命性的,一旦不重视,在不久的将来随时可能爆发,导致系统卡顿甚至无法操作,即时重启也无济于事:甚至极其难以发现.这里为自己记录一下过往的经验.系统一开始的设计,很大程度上决定 ...
- 慢SQL
慢SQL 目录 慢SQL 一.慢SQL概念 2.参数 3.配置 3.1.slow_query_log 3.2.slow_query_log_file 3.3.long_query_time 3.4.l ...
- CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1.npm install -g increase-memory-limit 2.increase-memory-limit 3.重启解决
- 89. 格雷编码 (Medium)
问题描述 89. 格雷编码 (Medium) n 位格雷码序列 是一个由 2ⁿ 个整数组成的序列,其中: 每个整数都在范围 [0, 2ⁿ - 1] 内(含 0 和 2ⁿ - 1) 第一个整数是 0 一 ...
- Word08 创新产品展示说明会邀请函office真题
1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...