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读取注册表中值的方法
Apr 08 Python
跟老齐学Python之玩转字符串(1)
Sep 14 Python
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
Flask框架web开发之零基础入门
Dec 10 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
python导入库的具体方法
Jun 18 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
生成静态页面的php函数,php爱好者站推荐
2007/03/19 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
Vue中props的使用详解
2018/06/15 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
Python获取脚本所在目录的正确方法
2014/04/15 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
如何在python中执行另一个py文件
2020/04/30 Python
python批量修改文件名的示例
2020/09/27 Python
汽车专业毕业生推荐信
2013/11/12 职场文书
年终考核评语
2014/01/19 职场文书
高中军训感言1000字
2014/03/01 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
竞聘演讲稿
2014/04/24 职场文书
辅导员评语
2014/05/04 职场文书