python:opencv-三次元人脸检测

使用opencv提供的特征分类器进行检测

  • 三次元人脸检测数据集:haarcascade_frontalface_alt2.xml

  • 检测步骤

    1. 打开图片
    2. 加载特征分类器
    3. 调用特征分类器中的detectMultiScale函数进行人脸识别
    4. 根据返回的结果在原图中绘制矩形圈出人脸

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import cv2
import numpy as np

urza = cv2.imread('C:\\Users\\Administrator\\Pictures\\4.jpg')
urza = cv2.resize(urza,(1024,768))
#打开图片并调整大小

face_finder = cv2.CascadeClassifier('C:\\Users\\Administrator\\Downloads\\haarcascade_frontalface_alt2.xml')
#加载分类器
faces = face_finder.detectMultiScale(urza)
#使用分类器对图片进行人脸识别,识别出来的结果(vector)用face储存
print(urza)

#对于每一个结果:
for x,y,w,h in faces:
cv2.rectangle(urza,#绘制的图片
pt1=(x,y),#左上角坐标
pt2=(x+w,y+h),#宽高
color = [0,0,255],#BGR
thickness=2)#边框粗细

cv2.imshow('Urza',urza)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

其他人脸识别结果:

detectMultiScale的几个参数

参数1:image–待检测图片,一般为灰度图像加快检测速度;

**参数2:**objects–被检测物体的矩形框向量组;

**参数3:**scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

**参数4:**minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。

  • 如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
  • 如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上;

**参数5:**flags–要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因为这些区域通常不会是人脸所在区域;

**参数6、7:**minSize和maxSize用来限制得到的目标区域的范围。