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中映射类型(字典)操作符的概念和使用
Aug 19 Python
python版本的读写锁操作方法
Apr 25 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python线程中同步锁详解
Apr 27 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
Python 去除字符串中指定字符串
Mar 05 Python
Python函数生成器原理及使用详解
Mar 12 Python
Python基于requests实现模拟上传文件
Apr 21 Python
详解Django中异步任务之django-celery
Nov 05 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
discuz Passport 通行证 整合笔记
2008/06/30 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
vue 解决computed修改data数据的问题
2019/11/06 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
在Python中使用next()方法操作文件的教程
2015/05/24 Python
python计算一个序列的平均值的方法
2015/07/11 Python
python中使用序列的方法
2015/08/03 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
Python中的pack和unpack的使用
2018/03/12 Python
python解决字符串倒序输出的问题
2018/06/25 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
周鸿祎:教你写创业计划书
2013/12/30 职场文书
工作证明书
2015/06/15 职场文书
总结会主持词
2015/07/02 职场文书
详解Python牛顿插值法
2021/05/11 Python
java实现对Hadoop的操作
2021/07/01 Java/Android
java设计模式--建造者模式详解
2021/07/21 Java/Android
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python