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 相关文章推荐
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python简单实现enum功能的方法
Apr 25 Python
Django中的Signal代码详解
Feb 05 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
django框架模板语言使用方法详解
Jul 18 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
Python中文纠错的简单实现
Jul 07 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
You might like
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
解析argc argv在php中的应用
2013/06/24 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
python字典get()方法用法分析
2015/04/17 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python字典排序的方法
2019/10/12 Python
Django密码存储策略分析
2020/01/09 Python
Python 操作 MySQL数据库
2020/09/18 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
产品陈列协议书(标准版)
2014/09/17 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
承兑汇票延期证明
2015/06/23 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
python获取对象信息的实例详解
2021/07/07 Python
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android