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

季宁
季宁
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍利用OpenCV和Python实现人脸美白算法的具体步骤。通过参考Photoshop的图层混合原理,提出基于颜色映射表的增强方案。文章提供了完整的代码实现,包括双边滤波去噪、颜色空间映射及后期锐化与对比度调节,旨在实现自然的人脸美白效果。

人脸美白原理

从本质上看,人脸美白属于图像颜色空间的处理范畴,因此算法设计需围绕颜色空间展开。

我们可以参考Photoshop中图像美白的处理流程作为基础思路。

  • 第一步,新建一个图层并将其填充为白色。
  • 第二步,将该白色图层与原图进行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 相关产品和应用

全部下载

专题列表