社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Crossin的编程教室 • 6 年前 • 573 次点击  

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



01


整体设计


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

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


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

程序如下:
import cv2# 可更改value调整滤波的程度value = 28
def Beauty(path, filename): img = cv2.imread(path) img_res = cv2.bilateralFilter(img, value, value * 2, value / 2) filename = './static/out/{}'.format(filename)    cv2.imwrite(filename, img_res) return filename

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


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




02


用Flask操刀实战


接下来我们就来完成 Flask 部分的编写,Flask 是基于 python 的轻量级 Web 应用框架。上手也比较快,核心部分程序如下:
@app.route('/', methods=['GET', 'POST'])def index():    return render_template('index.html')
@app.route('/beauty', methods=['GET', 'POST'])def beauty(): if request.method == 'POST': file = request.files['image'] print(file) if file and allowed_file(file.filename): path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename) file.save(path) output = Beauty(path, file.filename) print(output) return render_template('index.html', output = output) else: return render_template('index.html', alert = '文件类型必须是图片!') else: return render_template('index.html')

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



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

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

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


我们接下来就可以将美颜好的图片进行另存为即可。最后,以视频的形式来展现一下程序的整个流程:


视频展示:


感兴趣的同学可以下载源码进行学习和练习:

链接: 

https://pan.baidu.com/s/1gv0F4pDd4fKXK0x0YhzeVw

提取码:  9ec5


注意:运行此项目代码需要安装好 opencv 和 flask 的库。具体方法可参考:

如何安装 Python 的第三方模块


运行代码中的 server.py 文件,并用流览器打开提示的默认地址:

http://127.0.0.1:5000/ 

即可访问页面。


作者:菜鸟哥 

来源:菜鸟学Python




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62906