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的Django框架的dj-scaffold项目
May 30 Python
python实现井字棋游戏
Mar 30 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
Python处理CSV与List的转换方法
Apr 19 Python
python实现海螺图片的方法示例
May 12 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Python中__repr__和__str__区别详解
Nov 07 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Python笔记之观察者模式
Nov 20 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
python高级特性简介
Aug 13 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php日历制作代码分享
2014/01/20 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
微信小程序签到功能
2018/10/31 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python中的sort方法使用详解
2014/07/25 Python
Python中的tuple元组详细介绍
2015/02/02 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
python实现随机漫步算法
2018/08/27 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2014年统战工作总结
2014/12/09 职场文书
公司租车协议书
2015/01/29 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript