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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
python实现Adapter模式实例代码
Feb 09 Python
python数字图像处理实现直方图与均衡化
May 04 Python
详解Django中间件执行顺序
Jul 16 Python
python 猴子补丁(monkey patch)
Jun 26 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
PyQt5的相对布局管理的实现
Aug 07 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
PHP的反射机制实例详解
2017/03/29 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Python实现随机爬山算法
2021/01/29 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
开会迟到检讨书
2014/01/08 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
公务员诚信承诺书
2014/05/26 职场文书
干部个人考察材料
2014/12/24 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
预备党员群众意见
2015/06/01 职场文书
三八妇女节致辞
2015/07/31 职场文书
初中政治教学工作总结
2015/08/13 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python