【题目】使用openCV进行人脸检测(python)

【时间】2018.09.21

【题目】使用openCV进行人脸检测(python)

【参考链接】本文来自 冰不语 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xingchenbingbuyu/article/details/51105159?utm_source=copy,在此基础上进行补充,修正

【步骤】 调用opencv训练好的分类器和自带的检测函数检测人脸人眼等的步骤简单直接: 

1.加载分类器,当然分类器事先要放在工程目录中去。分类器本来的位置是在*\opencv\sources\data\haarcascades(harr分类器,也有其他的可以用,也可以自己训练)

2.调用detectMultiScale()函数检测,调整函数的参数可以使检测结果更加精确。(人脸检测)

3.把检测到的人脸等用矩形(或者圆形等其他图形)画出来。 (使用分类器+检测器后,还得自己得把人脸框出来)

【主要函数】

     这里面最主要的一个函数就是detectMultiScale()。文档中的解释如下:

C++函数中:

1.image表示的是要检测的输入图像 

2.objects表示检测到的人脸目标序列 

3.scaleFactor表示每次图像尺寸减小的比例

4. minNeighbors表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸), 

5.minSize为目标的最小尺寸 

6.maxSize为目标的最大尺寸 适当调整4,5,6两个参数可以用来排除检测结果中的干扰项。 

【 程序 】

import numpy as np
import cv2

# 注意要使用绝对路径,用/或者\\
face_cascade = cv2.CascadeClassifier("C:\\Users\\Administrator\\Desktop\\code\\ASFace\\preprocess\\haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("C:\\Users\\Administrator\\Desktop\\code\\ASFace\\preprocess\\haarcascade_eye_tree_eyeglasses.xml")
img = cv2.imread("C:\\Users\\Administrator\\Desktop\\code\\ASFace\\preprocess\\02.jpg")
#  转换图片的色彩空间
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.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_cascade.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.cvtColor(img,cv2.COLOR_BGR2GRAY) :opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成mask图等操作。openCV的默认色彩空间是BGR。

  • 分类器以及图片的位置用使用绝对路径,用/或者\\隔开

【运行结果】

猜你喜欢

转载自blog.csdn.net/C_chuxin/article/details/82804772