欢迎访问宙启技术站
智能推送

OpenCV-Python如何实现人脸美白算法

发布时间:2023-05-17 00:44:06

人脸美白算法是常见的图像处理算法之一,它可以提高人脸照片的质量,让人物更加漂亮自然。本文介绍了如何使用OpenCV-Python实现人脸美白算法。

1. 获取人脸照片

使用OpenCV-Python的人脸检测器,可以在照片中检测出人脸区域。本文使用Haar Cascade分类器进行人脸检测。

import cv2

face_classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

img = cv2.imread('face.jpg')

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_classifier.detectMultiScale(gray_img, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

上述代码中,face_classifier是一个Haar Cascade分类器,可以检测图片中的人脸区域。img是待处理的照片,gray_img是将彩色照片转换为灰度图像。detectMultiScale函数可以返回一个人脸矩形框列表,每个矩形框包含了一个人脸区域的左上角坐标以及矩形的宽和高。

2. 人脸美白

对于每个人脸区域,我们可以通过调整像素值来实现美白的目的。具体来说,我们可以增加像素的亮度,降低像素的对比度,以及减小噪点的干扰。

for (x, y, w, h) in faces:

    roi = img[y:y+h, x:x+w]

    roi_hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

    roi_hsv[:, :, 1] = roi_hsv[:, :, 1] * 0.8

    roi_hsv[:, :, 2] = roi_hsv[:, :, 2] + 30

    roi_bgr = cv2.cvtColor(roi_hsv, cv2.COLOR_HSV2BGR)

    img[y:y+h, x:x+w] = roi_bgr

上述代码中,我们首先从原始图像中提取了一个人脸区域roi,并将其转换为HSV颜色空间。接下来,我们将饱和度减小20%(roi_hsv[:, :, 1] = roi_hsv[:, :, 1] * 0.8),这样可以减小肤色的红色成分。然后,我们将明度增加30(roi_hsv[:, :, 2] = roi_hsv[:, :, 2] + 30),使得人脸更加亮丽。最后,将HSV图像转换为BGR颜色空间,并将处理后的颜色值赋值给原始图像的人脸区域。

3. 结果展示

最后,我们可以将处理后的人脸照片保存到本地,并展示处理前后的效果。

cv2.imwrite('whitened_face.jpg', img)

cv2.imshow('original', cv2.resize(cv2.imread('face.jpg'), (500, 500)))

cv2.imshow('whitened', cv2.resize(cv2.imread('whitened_face.jpg'), (500, 500)))

cv2.waitKey(0)

以上代码中的imshow函数,可以在图像窗口中展示图片。 个参数是窗口的标题,第二个参数是要展示的图片。waitKey函数可以等待用户按下键盘,用于保持窗口显示。

结果展示如下图所示。

![原始照片](https://img-blog.csdn.net/20180118203759895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluX21hbnlfaW5fc2NpZW5jZV9pbmZv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)

![美白照片](https://img-blog.csdn.net/20180118203834128?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluX21hbnlfaW5fc2NpZW5jZV9pbmZv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)