用Python画圣诞老人的N种方法

2018年12月25日 325点热度 0人点赞 0条评论

今天是圣诞节,学Python这么久,不如用Python画一幅圣诞老人来庆祝一下圣诞节!同时回顾下图像处理和展示的几种基本方法吧。此次分享仅限于基本的python图像操作,不涉及深度学习,机器视觉等内容。


1.牛刀小试:灰度图


Python的图像展示方式真的很多,我们先从最简单的开始,对图像进行转换操作,生成灰度图和二值图。灰度是白色与黑色之间按对数关系分为的256个等级,对于一幅图像可以简单理解为把彩图变为黑白图。


1).Python中的PIL、openCV等很多库都可以实现图像的灰度化处理,这里以PIL为例进行说明,首先准备一幅图片:

图片


执行以下代码:

图片

看一下效果:


图片


2).与灰度图类似,PIL还可以将图像转换为二值图

所谓二值图,即图像上每个像素的颜色非黑即白,图像的二值化 能在保留图像轮廓的前提下使图像中数据量大幅减少,对图像的进一步处理具有非常重要的作用。

执行以下代码:

图片

再来看看新生成的图片效果:

图片

此类操作的主要用途是为图片的进一步处理奠定基础,当然,无论是PIL还是openCV都可以对图像进行更加复杂的处理操作,然而这并不是我们今天的重点,有兴趣的朋友玩玩就好。


2.数据时代:词云图

“大数据”这个概念刚刚进入大众视野的时候,各种与数据相关的场合基本都会见到词云图的身影,好像没有词云图 就没法谈数据。虽然时至今日词云图已不再新奇,但毕竟是一种可视化的展示方式,用来画一幅圣诞老人的词云图 也未尝不可。

画这种词云图需要两个素材,一是以空格为间隔的词语字符串,二是背景图片。既然是圣诞节主题,这里选用小说 《哈利波特与穿越者》第八章《圣诞节》作为词语素材,然后对文本进行jieba分词和字符串处理得到画词云图用的 词源,代码如下:

图片


然后找一幅圣诞老人的图片,在此基础上使用wordcloud绘制词云图,原图就不看了,直接看绘制后的词云图:

图片

排除分词的准确度,单看词云图效果还是不错的,绘图相关代码如下:

图片

3.字符跳舞:字符图

相信刷抖音的朋友都还记得前段时间风靡一时的字符跳舞,做字符舞视频的基础就是根据原图生成对应的字符图。

字符图的绘制思路与词云图有些类似,都是以一幅图为基准绘制字符(符号),不同的是字符图需要遍历基准图的 每一个像素,根据像素的RGB和亮度转换成对应的字符,还要考虑像素尺寸和单个字符尺寸的转换比例,而在词云 图中这些都是不需要考虑的。

绘制字符图首先要根据原图尺寸建立新图,然后结合单个字符尺寸对原图进行等比例缩放,不然绘制出的字符图会出现失真的情况,这部分操作代码如下:

图片

上面一步完成后,就要对原图中的每一个像素进行遍历,按照一定的规则转换为对应字符,然后在新建的空白图像中按照原位置(坐标)绘制相应字符,代码如下:

图片

同样,不展示圣诞老人原图,直接看下转换后的字符图效果(下图)。另外,如果有需求,在绘制字符的过程中也可以按原图中的像素颜色对字符进行着色操作,这里就不演示了。

图片



4.一气呵成:动态图


制作动图我们用一个第三方库imageio,  这个第三方库功能如其名,其长处在于能把图片以各种格式读入然后再以各种格式导出,当然也就包括gif格式的动图。在制作动图之前需要先准备好一组静态图,然后调用imageio包的mimwrite方法进行合成,代码如下。

  • 'gif.gif'为输出文件名称,可任意指定;

  • gifList中保存了作为数据源的静态图;

  • duration为动态图的切换间隔。

合成后的动图效果如下:

图片

据说投稿多了,就会变成高手

图片

看完了上面的一波操作,是不是发现Python还是很有趣的,特别是动手写点代码捣鼓一些小玩意来庆祝圣诞节别有一番风味,你说呢,欢迎留言讨论!

近期热门:

电影"海王"真的好看吗|我爬取了9000条影评,得出的结论是

强烈推荐|麻烦刚关注2699名小伙伴一定要看,信息量太大

莫欺少年穷,嚼的了菜根,方能成大事

70720用Python画圣诞老人的N种方法

这个人很懒,什么都没留下

文章评论