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抓取网页中的图片示例
Feb 28 Python
python daemon守护进程实现
Aug 27 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python requests发送post请求的一些疑点
May 20 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python如何执行系统命令
Sep 23 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
Jun 09 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
js 概率计算(简单版)
2017/09/12 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
js+css实现打字效果
2020/06/24 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
Python开发常用的一些开源Package分享
2015/02/14 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
简单了解Python生成器是什么
2019/07/02 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
C#实现启动一个进程
2016/10/01 面试题
大二法英学生职业生涯规划范文
2014/02/27 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
超市创业计划书
2014/09/15 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
Python Matplotlib库实现画局部图
2021/11/17 Python
Redis数据同步之redis shake的实现方法
2022/04/21 Redis