OpenCV-Python实现人脸磨皮算法


Posted in Python onJune 07, 2021

人脸磨皮是最基础的人脸美颜效果。主要分为祛斑,祛痘,淡化黑眼圈等步骤。通过前面的学习相信大家一眼都看得出来我们需要干什么才能识别人脸磨皮效果。

因为磨皮之后,脸部的杂质基本上就没有了,也可以说丢失了细节。那么肯定需要用到滤波函数。滤波的过程就是把图像的每一个像素值输入过滤器,得到平滑的图像。

而我们常用的滤波有均值滤波,高斯滤波以及双边滤波三种,到底选用那种滤波呢?

首先,均值滤波会因为是用周围像素的平均值代替原像素值,肯定会导致图像过于模糊,所以排除掉。其次,高斯滤波与均值滤波原理类似,只是高斯滤波器的模板系数会随着距离模板中心的增大而减小,虽然可以减弱图像的模糊程度,但是图像边缘信息会丢失。

那么,只剩一个滤波了,也就是双边滤波器。因为它同时综合了高通滤波器和a-截尾均值过滤器的叠加效果,即可以保证图像不是非常模糊,也可以保留图像边缘信息。

而人脸磨皮原理的步骤分为如下3个步骤:

  • 图像滤波
  • 图像融合
  • 图像锐化

因为,不管上面3种滤波如何,都会导致一定的模糊(只是相对来说谁更优而已),所以需要对图像进行融合与锐化的操作。这样,可以保留一些图像的细节,以增强图像的真实感。

其中,图像融合使用的函数就是cv2.addWeighted()图像加权函数。融合的是原图与双通滤波后的图像。

最后,图像锐化使用的PIL库进行操作,使用它的ImageEnhance.Sharpness()函数自动调节图像的锐度与对比度。

实现人脸磨皮效果

既然我们已经完全掌握了人脸磨皮的原理。下面,我们来直接实现人脸的磨皮效果,具体的代码如下所示:

# 人脸磨皮
def facial_dermabrasion_effect(fileName):
    img = cv2.imread(fileName)
    blur_img = cv2.bilateralFilter(img, 31, 75, 75)
    #图像融合
    result_img = cv2.addWeighted(img, 0.3, blur_img, 0.7, 0)
    cv2.imwrite("58_1.jpg", result_img)

    image = Image.open("58_1.jpg")
    # 锐度调节
    enh_img = ImageEnhance.Sharpness(image)
    image_sharped = enh_img.enhance(1.5)
    # 对比度调节
    con_img = ImageEnhance.Contrast(image_sharped)
    image_con = con_img.enhance(1.15)
    image_con.save("58_2.jpg")

    img1 = cv2.imread("58.jpg")
    img2 = cv2.imread("58_2.jpg")
    cv2.imshow("1", img1)
    cv2.imshow("2", img2)
    cv2.waitKey()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    facial_dermabrasion_effect("58.jpg")

运行之后,效果如下:

OpenCV-Python实现人脸磨皮算法

这段代码的参数都是可以调整的,并不是一层不变的,感兴趣的读者可以自己调节参数试试效果,当然人脸磨皮只是看起来皮肤光滑了。下面结合美白的效果,就可以实现相机的那种美颜。

到此这篇关于OpenCV-Python实现人脸磨皮算法的文章就介绍到这了,更多相关OpenCV 人脸磨皮内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python自动化测试工具Splinter简介和使用实例
May 13 Python
有关wxpython pyqt内存占用问题分析
Jun 09 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
Python遍历目录的4种方法实例介绍
Apr 13 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
在dataframe两列日期相减并且得到具体的月数实例
Jul 03 Python
python使用matplotlib画饼状图
Sep 25 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
python实现简单坦克大战
Mar 27 Python
Python Django搭建文件下载服务器的实现
May 10 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
PHP中strtotime函数使用方法分享
2012/01/10 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP CURL使用详解
2019/03/21 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
关于redux-saga中take使用方法详解
2018/02/27 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
Python 异常处理实例详解
2014/03/12 Python
Python查找相似单词的方法
2015/03/05 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
python实现中文转换url编码的方法
2016/06/14 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
社区中秋节活动方案
2014/01/29 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
档案工作汇报材料
2014/08/21 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android