美文网首页OpenCV实战
OpenCV实践之OpenCV人脸识别

OpenCV实践之OpenCV人脸识别

作者: 一直特立独行的猪_go | 来源:发表于2017-06-29 14:59 被阅读33次

调用OpenCV训练好的分类器和自带的检测函数检测人脸

步骤
  1. 加载分类器
  2. 调用detectMultiScale()函数检测,调整函数的参数可以使检测结果更加精确
  3. 把检测到的人脸用矩形画出来

主要函数:

image.png

1.image表示的是要检测的输入图像
2.objects表示检测到的人脸目标序列
3.scaleFactor表示每次图像尺寸减小的比例
4.minNeighbors表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸),
5.minSize为目标的最小尺寸
6.minSize为目标的最大尺寸

适当调整4,5,6两个参数可以用来排除检测结果中的干扰项。

python程序:

import cv2
import numpy as np 


# 使用opencv进行面部检测
def mk_face(imgPath):
    # 加载面部 分类器
    face_cacsde = cv2.CascadeClassifier(
        './data/haarcascades/haarcascade_frontalface_default.xml')
    # 加载眼部 分类器
    eye_cacsde = cv2.CascadeClassifier(
        './data/haarcascades/haarcascade_eye.xml')
    # 读取照片
    img = cv2.imread(imgPath)
    # 将BGR颜色转换为GRAY
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 检测面部 参数:1, 待检测的输入图像。2,检测到的人脸目标序列。3,每次图像尺寸减少的比例
    # 4,每一个目标至少要被检测到3次才算是真的目标.5,目标的最小尺寸. 6,目标的最大尺寸
    faces = face_cacsde.detectMultiScale(
        gray, 1.1, 5, cv2.CASCADE_SCALE_IMAGE, (50, 50), (100, 100))
    
    if len(faces) > 0:
        for faceRect in faces:
            x, y, w, h = faceRect
            # 画一个绿色矩形
            cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2, 8, 0)

            roi_gray = gray[y:y+h, x:x+w]
            roi_color = img[y:y+h, x:x+w]
            # 识别人眼
            eyes = eye_cacsde.detectMultiScale(
                roi_gray, 1.1, 1, cv2.CASCADE_SCALE_IMAGE, (2, 2))
            # 画人眼的矩形
            for (ex, ey, ew, eh) in eyes:
                cv2.rectangle(
                    roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


def main():
    mk_face('./data/7.jpg')
    pass

if __name__ == '__main__':
    main()

效果:

image.png

相关文章

网友评论

    本文标题:OpenCV实践之OpenCV人脸识别

    本文链接:https://www.haomeiwen.com/subject/erbmcxtx.html