码迷,mamicode.com
首页 > 其他好文 > 详细

图片,还可以这样玩儿

时间:2016-04-18 08:50:12      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

前几天,我在装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

技术分享

图片,还可以这样玩儿

标签:

原文地址:http://blog.csdn.net/zgwangbo/article/details/51174433

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!