利用haar进行人脸检测

haar简介

参数下载

如果下载过C语言版OpenCV包,可以不用进行参数下载了,原包中就有所需的haar参数,下图中即是所需文件
在这里插入图片描述

如果没有下载过C语言版的OpenCV包,则需要在OpenCV的官方GitHub中下载
下载地址
这个文件夹里的各个文件,在进行人脸检测时,需要将它的路径作为CascadeClassifier类对象的初始化参数。如果只要进行脸部识别与眼部识别,下载haarcascade_frontalface_default.xml、haarcascade_eye.xml即可

源码

# -*- coding: utf-8 -*-
"""
Created on Tue Feb  4 12:16:37 2020

@author: lwz
"""
import numpy as np
import cv2 as cv


# 载入训练好的数据与读图
face_cascade = cv.CascadeClassifier(r'E:\OpenCV\opencv\build\etc\haarcascades\haarcascade_frontalface_default.xml')
eye_cascade = cv.CascadeClassifier(r'E:\OpenCV\opencv\build\etc\haarcascades\haarcascade_eye.xml')
img = cv.imread('E:\PyCharm\OpenCV\Gakki.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 8)
# faces数组中存储x,y,w,h,也就是脸的矩形框的坐标+宽高

for (x, y, w, h) in faces:
    cv.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 3)
    cv.putText(img, 'face', (x, y), cv.FONT_HERSHEY_COMPLEX, 0.6, (0, 255, 0), 1)
    # 眼部
    roi_eye = gray[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(img, 1.3, 15)
    # eyes数组中存储x,y,w,h,也就是脸的矩形框的坐标+宽高

    for (ex, ey, ew, eh) in eyes:
        cv.rectangle(img, (ex, ey), (ex+ew,ey+eh), (255,0,0),3)
        cv.putText(img, 'eye', (ex, ey), cv.FONT_HERSHEY_COMPLEX, 0.6, (0,255,0), 1)

# 总结:调用CascadeClassifier中封装的detectMultiScale方法获得脸部矩形框的参数
title = '人脸检测'
gbk_title = title.encode("gbk").decode(errors="ignore")
cv.imshow(gbk_title, img)
# imshow函数默认gbk编码,而python默认utf-8编码,因此需要转换
cv.waitKey()

在spyder环境下运行更好

识别结果

在这里插入图片描述

总结:新垣结衣天下第一!

发布了38 篇原创文章 · 获赞 9 · 访问量 6298

猜你喜欢

转载自blog.csdn.net/qq_42138454/article/details/104169087