图片,还可以这样玩儿

前几天,我在装linux软件的时候,发现一个比较好玩儿的软件,叫aview,他可以把一张图片转化成文本的图案。于是,就把软件推荐给同事们。gy同学觉得有意思,于是乎回家用脚本和程序也做出了同样的效果。

整好,老王前两周刚刚跟大家讲过图像的处理和文字的识别,于是乎就热炒热卖,用之前的程序,加了几行代码,就做到了同样的效果。先给大家看看结果:

原图:

转换后在shell中的效果:

怎么样,感觉还行吧~

作为程序员,就是有那么一点点的好奇心,想知道怎么弄的嘛?跟老王一起往下看吧~

·主流程

以上就是主流程的代码,比较简单,20行左右。具体操作如下:

1、从工程目录的data下读出文件;

2、为了在shell中输出效果更好,将文件做一次长宽压缩;

3、读出图片每个像素的RGB值;

4、将RGB做灰度处理;

5、将灰度图打印成文字输出。

怎么样,是不是很简单呢?具体的我们往下走:

·读取文件

读文件很简单,只需要用系统的库,把文件读取到内存即可。

·文件长宽压缩

我们把读取的文件,做长宽压缩。我写的函数支持长宽等比压缩。压缩的时候,可以自己通过坐标转换,也可以用系统的函数实现。我这里就图简单,用的系统函数。

·读取像素RGB值

我们将图像的每个像素的RGB值读取出来,放入到二维数组中,方便处理。

·灰度化

接下来,就是将每个像素的RGB值转化为灰度值。灰度值,其实就是把RGB三原色做一个加权,也等同于YUV中的Y通道值。老王在之前的《拍照怎么搜题》中详细讲过怎么样做灰度,如果想详细了解,可以订阅老王的微信:simplemain进行查阅。

·把灰度值打印输出

好了,我们有了灰度值,最后一步,就是把他变成文字打印输出(老王已经迫不及待了……)

我们先定义了一些字符,就是用来显示不同灰度效果的。因为灰度值的范围是[0,255],值越大,则越白越亮;值越小,则越黑越暗。因为我们的shell背景是黑色的,所以,我在定义字符的时候,把看起来比较饱满的字符给了灰度值大的。

然后,我们将灰度值映射到对应的字符上。比如,我们这里一共22个字符,那么每12个灰度值对应一个字符:灰度值[0,11] ->
第一个字符-点号[.];灰度值[12,23]->
第二个字符-逗号 [,];……灰度值[252,255] ->
第22个字符[@]

只要将最后的结果打印输出到shell(或者控制台)就得到我们文章一开始的效果图了,是不是很简单啊,这里老王打印了一些图:

其实懂了这个原理,还可以把视频用文本的方式播放出来。原理就是提取视频每帧的图片,然后用文本绘制。只是在绘制的时候,要注意换行、回退这些问题。

好吧,老王今天就是突发奇想,所以文章很短,就到这儿吧~ ^_^

如果你对只讲技术干货的老王感兴趣,请关注老王的微信公众号:simplemain

时间: 2024-11-12 19:12:35

图片,还可以这样玩儿的相关文章

repost: Deep Reinforcement Learning

From: http://wanghaitao8118.blog.163.com/blog/static/13986977220153811210319/ accessed 2016-03-10 深度强化学习(Deep Reinforcement Learning)的资源 Google的Deep Mind团队2013年在NIPS上发表了一篇牛x闪闪的文章,亮瞎了好多人眼睛,不幸的是我也在其中.前一段时间收集了好多关于这方面的资料,一直躺在收藏夹中,目前正在做一些相关的工作(希望有小伙伴一起交流)

Facebook Oauth2.0 API调用方法

这些天搞了下Facebook API的东东,在官方网站下弄了一些接口,下面简单的把facebook的调用流程以及常用接口书序一下 :-)  当然在使用facebook api之前要有facebook账号以及在facebook上注册一个自己的应用  1.登录鉴权 https://graph.facebook.com/oauth/authorize?client_id=8888888888888&redirect_uri=http://www.mywebsite.com&scope=user_

深度强化学习(Deep Reinforcement Learning)的资源

来源:http://wanghaitao8118.blog.163.com/blog/static/13986977220153811210319/ Google的Deep Mind团队2013年在NIPS上发表了一篇牛x闪闪的文章,亮瞎了好多人眼睛,不幸的是我也在其中.前一段时间收集了好多关于这方面的资料,一直躺在收藏夹中,目前正在做一些相关的工作(希望有小伙伴一起交流). 一.相关文章 关于DRL,这方面的工作基本应该是随着深度学习的爆红最近才兴起的,做这方面的研究的一般都是人工智能领域的大

前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开

使用CSS3滤镜让图片反转颜色

CSS提供的滤镜也是一大亮点,我一直痴迷其中,有些滤镜的效果很有用,可是有些的滤镜效果可能只是为了玩玩儿,CSS常见的滤镜有这些:grayscale, blur, sepia,所有常见的过滤器.但是如何使用和转化图片呢?今天我们主要是来讲讲如何使用CSS3滤镜让图片反转颜色. CSS代码 invert滤镜就是为了设置元素的反色效果,他的值设置范围为:0-100%,100%为完全反色,0为显示正常的颜色. .normal {     filter: invert(0%); } .inverted

iOS下载图片之前获取网络图片尺寸的失败尝试

最近一直在找获取网络图片的size的方式,最后得出两个结论: 1 使用分线程下载下来,然后获得图片的size 2 使用网络请求图片的头文件,然后从头文件中找到图片大小的信息 第一种方法需要主线程分线程切换,因为在使用tableView来reloadData的时候,刷表老是出问题,先放着不管 然后我重点是想搞一下第二个方法: 在网上找到了一个博客:http://cxjwin.github.io/2013/11/05/preview_image_size/ 大神写的很不错 主要思路就是先在网上找一个

淘宝店的图片哪里来的

有的是自己拍的,人后进行P图,有的是在别的店家盗用的.还有在百度上下载的自己更改一下,还有就是厂家提供的.转:http://zhidao.baidu.com/question/1882560047626784668.html 很多是自己拍摄实物上传的图片,也有卖家做模特拍摄而成,那种很光鲜的很多是代理商提供的图片,最好还是自己以实物拍摄,这样才是首要的诚信转:http://zhidao.baidu.com/question/125129750.html?qbl=relate_question_2

php下载远程图片到本地

在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求1:使用curl 比如我们有下面这两张图片: $images = [ 'https://img.alicdn.com/tps/TB1jjaYOFXXXXa2aXXXXXXXXXXX-276-402.jpg_150x10000q90.jpg', 'https://img.alicdn.com/tfs/TB15QQ5cgMPMeJjy1XbXXcwxVXa-520-280.jpg_q90_.webp'

Scrum到底怎么玩儿?

前言 BB-Talk 是什么? BB-Talk 是由Worktile 特别推出的线上分享活动,聚焦互联网时代更高效的工作流,横跨TMT.电商.律师.教育等各行业,覆盖研发.产品.设计.市场.运营.HR.行政等各职业. 每期邀请一位相关领域的大牛嘉宾,通过微信群内的语音.文字.图片等形式,分享干货.自在交流. 本文为6月14日BB-Talk 第一期嘉宾分享与互动提问的总结. 本期嘉宾 徐子岩,Worktile 首席科学家,软件架构师,连续5届微软MVP,著有<实战Windows Azure>.