十行代码,用Python做一个迷你版的美图秀秀

美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让人变得更加的美丽。今天小编就带领大家来借助Python和Flask来实现一个美图秀秀的网页设计,大家只需要通过网页上传需要美颜的图片,然后就可以从网页下载美颜好的图片。

01

整体设计

首先我们需要实现的是美图秀秀的功能,在一幅图中,我们看起来的非常粗糙的点,可以视作是一些噪声,而我们就需要借助工具去去除这些噪声,使得图像看起来更加平滑。

这里我们采用的是双边滤波来过滤掉这些噪声。双边滤波是将图像的像素点从空间上的邻近程度,和像素值之间的相似程度两个方面去考虑,从而叫做双边,即同时考虑两方面的信息。如下图所示 :

上图中的两点就是我们的两个像素,他们之间的空间距离体现出了邻近程度,而两个像素值的大小(图中的70、80)则是体现出了像素之间的像素值相似度。双边滤波可以很好的保留图像中的边缘细节,使得我们的图像在很好的过滤噪声的同时,使得图像不会过于的失真,也就是使得图像看起来很自然,P的痕迹不明显。

程序如下图所示:

这里我们使用opencv中集成的双边滤波算法,这个value值表示在过滤的过程中,图像中的每个像素领域的直径范围,这个值越大,图片中的噪声滤除的越好,但是图片看上去也会越像是P过的,而这个值越小,则图片美颜的效果会越差。

这里小编实验得出,28左右时效果比较好,我们使用opencv读入图片,然后将图片进行滤波,将滤波后的图片写入到指定的本地文件中,并将文件的路径返回。下图展示的是美颜前后的图片对比,可以看出,美颜效果还是很好的,只用区区十行代码就可以完成美颜的效果。

02

用Flask操刀实战

接下来我们就来完成Flask部分的编写,Flask是基于python的轻量级 Web 应用框架。上手也比较快,程序如下图所示。

程序中首先调用index函数,并返回我们写好的index.html的网页,我们只需点击程序给出的默认链接,便会自动打开网页,如下图所示。

在网页中我们点击选择文件,选择我们需要美颜的图片,然后点击上传,网页便会将我们提交的表单信息返回,程序便会跳转到我们的beauty子页面并执行我们写好的beauty函数。

在函数中,我们首先取出的图片名称,并判断我们上传的图片类型是不是符合我们的要求,然后我们执行之前写好的美颜函数Beauty,将美颜好的图像进行保存,并返回保存的路径。

接着我们再将路径信息提供给网页,网页通过html标记语言,访问美颜图片的路径进行显示,效果如下所示:

我们接下来就可以将美颜好的图片进行另存为即可。最后,小编以视频的形式来展现一下程序的整个流程,大家如果喜欢的话,就可以现在下载源码,学习起来吧。

视频展示:

关于源码,我们到时会录制视频,详细跟大家讲一下步骤和源码解读,会放在B站上,敬请期待!

另外说一下,我们B站的名字被抢注了

目前菜鸟学Python B站的官方号

菜鸟玩Python

目前已完成的视频录制如下:

  • 用Python做一个元宵节的灯谜小程序

  • 用Python集齐五福

  • 用Python批量做海量的小姐姐素描图

  • 用Python做一个缩放自如的圣诞老人

 点击阅读原文,尝鲜B站视频