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三元运算符实现方法
Dec 17 Python
python实现通过代理服务器访问远程url的方法
Apr 29 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python 设置文件编码格式的实现方法
Dec 21 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
python 实现将多条曲线画在一幅图上的方法
Jul 07 Python
python系列 文件操作的代码
Oct 06 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 Python
python如何将两张图片生成为全景图片
Mar 05 Python
如何使用pandas读取txt文件中指定的列(有无标题)
Mar 05 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
You might like
用PHP调用Oracle存储过程
2006/10/09 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
详解PHP PDO简单教程
2019/05/28 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
生产车间主任的个人自我鉴定
2013/10/25 职场文书
求职自荐信格式
2013/12/04 职场文书
上课说话检讨书大全
2014/01/22 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
反四风对照检查材料
2014/09/22 职场文书
Python四款GUI图形界面库介绍
2022/06/05 Python