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数组条件过滤filter函数使用示例
Jul 22 Python
Python中类型关系和继承关系实例详解
May 25 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
python 实现敏感词过滤的方法
Jan 21 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
Python底层封装实现方法详解
Jan 22 Python
基于pycharm实现批量修改变量名
Jun 02 Python
Python3基于print打印带颜色字符串
Jul 06 Python
python处理写入数据代码讲解
Oct 22 Python
python Tkinter的简单入门教程
Apr 11 Python
python中redis包操作数据库的教程
Apr 19 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
改变Apache端口等配置修改方法
2008/06/05 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
js 幻灯片的实现
2011/12/06 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
python处理图片之PIL模块简单使用方法
2015/05/11 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
python实现按行切分文本文件的方法
2016/04/18 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
阿里旅行:飞猪
2017/01/05 全球购物
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
会计学毕业生求职信
2014/06/25 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
学术会议通知
2015/04/15 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
pandas 实现将NaN转换为None
2021/05/14 Python