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中的应用之translate和maketrans用法详解
Aug 27 Python
python计算牛顿迭代多项式实例分析
May 07 Python
python查看微信好友是否删除自己
Dec 19 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
python回调函数中使用多线程的方法
Dec 25 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
PHP调用三种数据库的方法(1)
2006/10/09 PHP
php 在线打包_支持子目录
2008/06/28 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
javascript的事件描述
2006/09/08 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
Python 可爱的大小写
2008/09/06 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Python如何读写CSV文件
2020/08/13 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
求职简历自荐信
2013/10/20 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
研究生个人学年总结
2015/02/14 职场文书
心灵捕手观后感
2015/06/02 职场文书
学校少先队工作总结
2015/08/12 职场文书
古诗之感恩老师
2019/10/24 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
Linux中各个目录的作用与内容
2022/06/28 Servers