OpenCV实战之人脸美颜美型

Posted Mega_Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV实战之人脸美颜美型相关的知识,希望对你有一定的参考价值。

需求分析

        俗说话“一白遮三丑”,这代表一种大众审美的标准,也是众多化妆品的宣传卖点之一;因此美白也成为美颜算法中一项基础且重要的功能。

量化分析

        美白的目的是使得皮肤变得更加“白皙”,“白皙”在RGB颜色空间中的值为白色(255,255,255);在YCbCr空间中Y代表亮度,Y越大,图像亮度越高(越白)。我们需要想办法把皮肤像“白色”的方向调整。

 实现策略

        我们处理的图像格式为RGB,一种处理方法为创建映射曲线,使得映射后的RGB有增大的趋势。可使用如下数学形式的曲线,该曲线具有如下性质:1)变量域和值域都位于(0,1)范围;2)映射后的值相比之前都会变大;3)beta越大,值变大的比例越高。

OpenCV⚠️实战⚠️ 人脸识别 ☢️建议手收藏☢️

【OpenCV】⚠️实战⚠️ 人脸识别 ☢️建议手收藏☢️

概述

OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家来实战一下, 用 OpenCV 实现人脸识别.

模型获取

模型下载地址

detectMultiScale

格式:

cv2.detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None)

参数:

  • image: 输入图像, 灰度图
  • scaleFactor: 图像尺寸缩小比例, 决定两个不同大小的窗口扫描之间有多大的跳跃
  • minNeighbors: 被检测到几次才算目标
  • minSize: 目标最小尺寸
  • maxSize: 目标最大尺寸

图片人脸识别

原图:


代码:

import cv2


def face_detect(image):
    # 转换成灰度图
    image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 实例化
    face_detector = cv2.CascadeClassifier(
        "C:/Users/Windows/Desktop/face/haarcascades/haarcascade_frontalface_alt_tree.xml")
    faces = face_detector.detectMultiScale(image_gray, 1.05, 3)

    # 遍历每个人脸
    for x, y, w, h in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 5)

    return image

if __name__ == "__main__":
    # 读取图片
    image = cv2.imread("face.jpg")

    # 人脸检测
    result = face_detect(image)

    # 图片展示
    cv2.imshow("result", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 保存结果
    cv2.imwrite("result.jpg", result)

输出结果:

视频人脸识别

代码:

import cv2


def face_detect(image):
    # 转换成灰度图
    image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 实例化
    face_detector = cv2.CascadeClassifier(
        "C:/Users/Windows/Desktop/face/haarcascades/haarcascade_frontalface_alt_tree.xml")
    faces = face_detector.detectMultiScale(image_gray, 1.01, 1)

    # 遍历每个人脸
    for x, y, w, h in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 5)

    return image


if __name__ == "__main__":

    # 读取视频
    capture = cv2.VideoCapture(0)

    # 循环
    while (True):

        # 读取一帧
        ret, frame = capture.read()
        frame = cv2.flip(frame, 1)
        result = face_detect(frame)

        # 显示
        cv2.imshow("frame", result)

        # q键退出
        if cv2.waitKey(1) & 0XFF == ord("q"):
            break

以上是关于OpenCV实战之人脸美颜美型的主要内容,如果未能解决你的问题,请参考以下文章

android OpenCV研究之动态人脸识别

图像滤镜艺术---人脸编辑(五官微调+瘦脸美型)

OpenCV-Python实战(17)——人脸识别详解

AI人工智能之基于OpenCV+face_recognition实现人脸识别

OpenCV-Python实战(16)——人脸追踪详解

求OpenCV视频教程自学之用