python图像转字符画_python图像处理-字符画风格图片

前言

字符画图片,顾名思义就是由一个个字符组成的图片,下面这张图片很容易帮助你理解,如果我们可以将字符排列好,让他看上去像一个物体的形状,那么最后再将它输出保存为一张图片就可以实现了。

ca1349540923dd54602d3c7abbd7e7d89d8248ae.png?token=7ff343eddb57a2fe3f5dcaec5466e6e0&s=EFFAA3561B234D3642E504DA000070B3

下面的这些形状同样可以使用这种方式实现。

0e2442a7d933c89523c89490bacd27f68002008f.png?token=05ac86ef385e811744283d8d250dac0c&s=85F24D325956DDCE086431CB0000C0B2

上面的图像看上去还是很不错的,如果要实现一个很复杂的图片,且展示出很多细节特征,那之前的方法就有点不可取了,比如下面的图片。

bd3eb13533fa828b65b4874697c11532950a5ae0.png?token=35baf32902a6f41a181e7f98aa24c90c&s=4B3A33C316A370B8823D69DA030040B3

通过我们今天的程序来处理,就可以很高效实现这种比较复杂且细节比较多的字符画了。

实现原理

我们知道字符画是一系列字符的组合,那要如何将它们变成字符画呢。

这里要解决三个问题:

1.如何将图片变成一个个字符。

2.接着要将他们有序的组织在一起。

3.显示出它们对应的颜色,从而形成一张彩色的字符画。

我们将一张图片想象成由行列组成的方格矩阵。

b3b7d0a20cf431adc432d3f621e8f8a92cdd9805.png?token=a84b3403c30c99af6dae5e8ee5f674d9&s=53397BCA6BA5BB6A5AEDDE1F0300E0C6

方格的每一个位置根据颜色的不同来填写对应的字符,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。问题来了,我们是要转换一张彩色的图片,这么多的颜色,要怎么对应到单色的字符画上去?这里就要介绍灰度值的概念了。

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

现在只有256种可能了,我们找找一串字符,有70个,总体的排列顺序是前面的像素更高,看上去更黑,越往后越低,看上去更亮,数量还是不够,我们可以通过比例来获取将256划分成70等份,每个字符就可以代表一个范围的颜色了。

5366d0160924ab184a0b955e5824b2cb7a890b9a.png?token=07a609d56af10ce932eea51c92945f63

字符画文字实现

d058ccbf6c81800a077d719bddeb67fc808b47eb.png?token=aa0fe63f0d3a13ef3f4e90510f087dca&s=AE80C54AFA8EEC1F8E34E95F000010E3

上面最后虽然出现了结果,由于像素比较高,导致字符串非常多,下面我们去缩小一下整个图片,改善显示效果。

d043ad4bd11373f0ed5b9b20ced11ffdfaed0409.png?token=7800ca23de3fb84c217942485dcb0b01&s=EEA0C54AB08F811F8F35E81F000080E3

上面效果就比较好了,仔细放大查看一下,里面的确全是字符组成的。

63d0f703918fa0ec83ffb4164d490de83c6ddbd2.png?token=0d0179fc8abbf5248688b6c7de516b5d&s=38007C3219C3494B48DDDCCA0000D0B3

变成图片

上面是将字符保存在文件里的,下面看看如何将其保存为图片。因为是通过将文字写到图片里面去的,文字有大小,如果直接用原来文字大小的图片是放不下去的,这里通过将图片变大一点乘以15,目的是为了放下所有文字。

203fb80e7bec54e732229301d5e6cf564dc26ac3.png?token=f959b498d8c8779bbc8214ad3c5f169d&s=AE80954AFECEFE1FCFB4E81F0300C0E3

彩色字符画图片思路

上面实现了黑白字符画图片,如果要实现彩色字符图画,可以将原来的图片在创建一份保留色彩的,在循环中获取对应灰度的时候,在获取对应位置的颜色值,写入时将颜色也同时写入就可以实现彩色字符画效果了。

(全文完)

python图像处理-实现验证码图片(上)

python图像处理-实现验证码图片(下)

python图像处理-gif动图

python图像处理-图片裁剪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在mybatis用mysql的代码块_mybatis plus与mysql分库组件mycat的结合

之前的文章简单介绍了一下mybatis plus:《使用Mybatis-plus代替原生Mybatis》。截止目前在项目中使用了一段时间的mybatis plus,再也没有写过sql,都用mp的Wrapper封装查询条件了。这里先简单介绍一下mp的用法(抱歉,上一篇里面讲得…

响应服务器535.5.7.0AUTH,javax.mail.AuthenticationFailedException:535 5.7.3无法发送邮件

我遇到了错误javax.mail.AuthenticationFailedException:535 5.7.3尝试发送电子邮件时的身份验证。我尝试使用两个不同的电子邮件帐户。一个使用Office365服务器详细信息,另一个使用Gmail服务器详细信息。在两种情况下,我都会遇到相同的错误。…

react生命周期函数_如何优雅的消灭掉react生命周期函数

开源不易,感谢你的支持,❤ star concent^_^序言在react应用里,存在一个顶层组件,该组件的生命周期很长,除了人为的调用unmountComponentAtNode接口来卸载掉它和用户关闭掉浏览器tab页窗口,该顶层组件是不会…

jolokia_Hawtio和Jolokia的Hibernate统计

jolokia企业Java的很大一部分处理数据。 在企业设置中使用数据的所有不同方式中,仍然存在使用任何种类的O / R映射的行之有效且广泛教授的方法。 JPA标准使每个人都比较容易使用它,并且它也应该是可移植的。 但是,我们不要谈论迁移细节。 O /…

python主循环方法mainloop_python gobject.mainloop吞噬信号事件

没有人感兴趣,所以让我尝试. 只是在同一页面上: import signal from gi.repository import GObject GObject.threads_init() mainloop GObject.MainLoop() signal.signal(signal.SIGINT, lambda n, f: mainloop.quit()) mainloop.run() 此代码有效: imp…

JVM垃圾收集和优化

总览 在对系统进行性能相关问题的故障排除时,内存优化是一个需要深入分析每个系统在内存中存储的内容,存储时间和访问模式的地方。 这篇文章是要在背景信息上进行注释,并在此工作中要注意一些要点,这些工作要专门针对基于Java的实…

redis desktop manager连不上redis_Redis安装教程

Ⅰ 简介Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(strings),散列(hashes&#…

python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因

昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile open("C:\Users\Spirit\Desktop\bc.txt",r) data infile.read() print(data) main() 然而结果总报错invaild argument 或者cant found such file *** 查找问题后 发现是由…

c++如何将int数组中的值取出*号运算符_如何用动态规划巧妙解决 “双十一” 购物时的凑单问题?羊毛薅起来!!!...

点击上方“程序员大白”,选择“星标”公众号重磅干货,第一时间送达今年过去的 “双十一” ,你有薅到羊毛吗?每年的双十一,会有各种促销活动,比如 “满 300元减 80 元”。假如你女朋友的购物车中有 n 个(n &…

mysql sql 去除重复行_mysql – sql自连接表删除重复行

我有下表:╔════════╦════════════╗║ USERID ║ LANGUAGEID ║╠════════╬════════════╣║ 1 ║ 2 ║║ 1 ║ 7 ║║ 1 ║ 8 ║║ 2 ║ 10 ║║ 2 ║ 3 ║╚════════╩════════════╝现在我想为每…

python操作界面_Python使用PyQt5的Designer工具创建UI界面

一、Designer-UI编辑器 Designer是pyqt5-tools带的工具,默认可以在Python安装目录下找到的。我的之前项目导入过pyqt5-tools,所以我直接全盘搜索到了。打开designer后,我们可以编辑我们想要的UI界面,下面是我编辑的测试界面&#…

python统计词频_Python统计四六级考试的词频

Python统计四六级考试的词频此文首发于公众号 「Python知识圈」, 欢迎直接去公众号查看阅读文本大概需要 4.6 分钟。今天是教师节,先祝天下所有老师教师节快乐,感谢您在我学生时代对我的谆谆教诲。现在是开学之初,风华正茂的青年才…

易语言 字段重复_使对易失性字段的操作原子化

易语言 字段重复总览 易失性字段的预期行为是,它们在多线程应用程序中的行为应与在单线程应用程序中的行为相同。 禁止它们表现相同的方式,但是不能保证它们表现相同的方式。 Java 5.0中的解决方案是使用AtomicXxxx类,但是这些类在内存&…

python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例

本篇文章适用于Python小白的教程篇,如果有哪里不足欢迎指出来,希望对你帮助。 本篇文章用到的模块: requests,re,os,jieba,glob,json,lxml,pyecharts,heapq,collection 首先 本文我们的目的 抓取周杰伦的所有歌曲, 歌词&#xff0…

qt4 连接mysql_Qt4访问mysql 数据库的简单教程

编译问题:1、系统中安装有VC,所以头文件冲突手工修改makefile删除所有-I 加载VC头文件的项目2、mysql cannot find -llibmysql指定libmysql.a的路径-LQt 4 访问 mysql 数据库的简单教程云帆 2006/5/18因为目前无法使用linux, 所以 Qt 4.1.2 是…

python多个函数_什么是在Python中使用多个构造函数的干净的、pythonic的方法?

其实None对于“魔法”价值观来说要好得多:class Cheese(): def __init__(self, num_holes None): if num_holes is None: ... 现在,如果您想完全自由地添加更多参数:class Cheese(): def __init__(self, *args, **kwargs): #args -- tuple o…

Java 8和Java 14之间的新功能

从版本9开始,Java每6个月就会有新功能,因此很难跟踪这些新更改。 互联网上的大多数信息都描述了最近两个Java版本之间的变化。 但是,如果您的情况与我相似,则说明您使用的不是Java的最新版本,而是使用了较旧的Java版本…

mysql中如何卸载插件_Eclipse中如何卸载插件

很久没用Eclipse了,今天打开的时候,突然报Android开发插件需要更新。打开插件管理页面,更新Android插件,又提示和旧版本有冲突,心想只能卸载了重新安装了。找了半天没找到在哪下载,把Eclipse目录下的plugin…

python io_NumPy IO

NumPy IO Numpy 可以读写磁盘上的文本数据或二进制数据。 NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。 npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。 常用的 IO 函数有: load() 和 save() 函数是读写文件数组数据的两个…

Java 14:instanceof的模式匹配

Java 14引入了pattern Matching for instanceof (另一种预览语言功能) ,从而消除了在使用instanceof时进行强制转换的需要。 例如,考虑以下代码: if (obj instanceof String) { String s (String) obj; System.out.pr…