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 相关文章推荐
Python3.2模拟实现webqq登录
Feb 15 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Python实现学校管理系统
Jan 11 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
Flask配置Cors跨域的实现
Jul 12 Python
使用python实现多维数据降维操作
Feb 24 Python
jupyter实现重新加载模块
Apr 16 Python
python和php哪个更适合写爬虫
Jun 22 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
Python unittest生成测试报告过程解析
Sep 08 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
可以在线执行PHP代码包装修正版
2008/03/15 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
浅析Git版本控制器使用
2017/12/10 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
社会学专业求职信
2014/02/24 职场文书
机关作风建设自查报告
2014/10/22 职场文书
热血教师观后感
2015/06/10 职场文书
公司处罚决定书
2015/06/24 职场文书
小王子读书笔记
2015/06/29 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL