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 相关文章推荐
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
python处理Excel xlrd的简单使用
Sep 12 Python
python3大文件解压和基本操作
Dec 15 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Python中反射和描述器总结
Sep 23 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
python IP地址转整数
Nov 20 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
python dataframe NaN处理方式
2019/12/26 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
工程专业应届生求职信
2014/02/19 职场文书
防汛工作情况汇报
2014/10/28 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
安全员岗位职责
2015/02/10 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
教你部署vue项目到docker
2022/04/05 Vue.js
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers