OpenCV-Python实现人脸美白算法的实例


Posted in Python onJune 11, 2021

人脸美白原理

人脸美白原理说透了,就是一种图像的颜色空间处理,所以我们需要通过颜色空间进行设计。

不过,我们先来参考以下PS对于图像美白的处理步骤:

  • 首先,新建一个图层,将这个图层设置为白色
  • 接着,将白色图层与原本图像进行alpha通道的颜色混合,这样就可以使图像整体变白。

通过PS的操作,我们大致可以知道需要创建一个与原图同等大小维度的图像,然后全部赋值为白色,然后通过图像图像加权和将两个图像叠加即可。

不过,这里明显存在很多问题,在PS中,我们虽然创建了全白色的图层,但是我们可以剪裁或者使用画笔工具只让白色叠加倒人物身上。而程序中,我们这么做会导致整个图像偏白,效果非常不理想。

那么,我们就需要考虑一个新的思路来实现人脸美白效果。

根据论文“A Two-Stage Contrast Enhancement Algorithm for Digital Images”,采用映射表,使原图在色阶上有所增强,并在图像两端亮度相对减弱,中间增强,则会产生不错的美白效果,又能使图像白的更自然。

这里,我们提供一个美白映射表Color_list:

Color_list = [
	1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 31, 33, 35, 37, 39,
	41, 43, 44, 46, 48, 50, 52, 53, 55, 57, 59, 60, 62, 64, 66, 67, 69, 71, 73, 74,
	76, 78, 79, 81, 83, 84, 86, 87, 89, 91, 92, 94, 95, 97, 99, 100, 102, 103, 105,
	106, 108, 109, 111, 112, 114, 115, 117, 118, 120, 121, 123, 124, 126, 127, 128,
	130, 131, 133, 134, 135, 137, 138, 139, 141, 142, 143, 145, 146, 147, 149, 150,
	151, 153, 154, 155, 156, 158, 159, 160, 161, 162, 164, 165, 166, 167, 168, 170,
	171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
	188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
	204, 205, 205, 206, 207, 208, 209, 210, 211, 211, 212, 213, 214, 215, 215, 216,
	217, 218, 219, 219, 220, 221, 222, 222, 223, 224, 224, 225, 226, 226, 227, 228,
	228, 229, 230, 230, 231, 232, 232, 233, 233, 234, 235, 235, 236, 236, 237, 237,
	238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 244, 245,
	245, 246, 246, 246, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 250,
	251, 251, 251, 251, 252, 252, 252, 252, 253, 253, 253, 253, 253, 254, 254, 254,
	254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 256]

实现人脸美白

既然人脸美白的原理,以及美白的颜色映射表都给到了你。下面,我们就可以实现人脸美白效果,具体代码如下所示:

def face_whitening(fileName):
    img = cv2.imread(fileName)
    img = cv2.bilateralFilter(img, 19, 75, 75)
    height, width, n = img.shape
    img2 = img.copy()
    for i in range(height):
        for j in range(width):
            b = img2[i, j, 0]
            g = img2[i, j, 1]
            r = img2[i, j, 2]
            img2[i, j, 0] = Color_list[b]
            img2[i, j, 1] = Color_list[g]
            img2[i, j, 2] = Color_list[r]
    cv2.imwrite("59_1.jpg",img2)

    image = Image.open("59_1.jpg")
    # 锐度调节
    enh_img = ImageEnhance.Sharpness(image)
    image_sharped = enh_img.enhance(1.2)
    # 颜色均衡调节
    con_img = ImageEnhance.Contrast(image_sharped)
    image_con = con_img.enhance(1.2)
    image_con.save("59_2.jpg")

    img1 = cv2.imread("58.jpg")
    img2 = cv2.imread("59_2.jpg")
    cv2.imshow("1", img1)
    cv2.imshow("2", img2)
    cv2.waitKey()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    face_whitening("58.jpg")

运行之后,效果如下:

OpenCV-Python实现人脸美白算法的实例

到此这篇关于OpenCV-Python实现人脸美白算法的实例的文章就介绍到这了,更多相关OpenCV人脸美白 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
Python中实现常量(Const)功能
Jan 28 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
详解Python中expandtabs()方法的使用
May 18 Python
python创建进程fork用法
Jun 04 Python
Python中如何获取类属性的列表
Dec 26 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
python字符串循环左移
Mar 08 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
Python绘制股票移动均线的实例
Aug 24 Python
python——全排列数的生成方式
Feb 26 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
You might like
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
php 远程图片保存到本地的函数类
2008/12/08 PHP
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
NumPy 如何生成多维数组的方法
2018/02/05 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
什么是会话Bean
2015/05/14 面试题
小学生读书感言
2014/02/12 职场文书
护士长竞聘书
2014/03/31 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
MySQL七种JOIN类型小结
2021/10/24 MySQL
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA
室外天线与收音机天线杆接合方法
2022/04/05 无线电