人脸检测---OpenCV-Python开发指南(41)

举报
择城终老 发表于 2021/07/27 00:23:55 2021/07/27
【摘要】 目录 人脸检测函数检测图像中的N个人脸 人脸检测函数 在OpenCV中,人脸检测使用的函数是cv2.CascadeClassifier.detectMultiScale(),它可以检测图像中所有的人脸。其完整定义如下: def detectMultiScale(self, image, scaleFactor=None, minNeighbors=No...

人脸检测函数

在OpenCV中,人脸检测使用的函数是cv2.CascadeClassifier.detectMultiScale(),它可以检测图像中所有的人脸。其完整定义如下:

def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None):

  
 
  • 1

image:待检测的图像,通常为灰度图像

scaleFactor:表示在前后两次相继的扫描中,搜索窗口的缩放比例

minNeighbors:表示构成检测目标的相邻矩形的最小个数。默认值为3,表示有3个以上的检测标记存在时,才认为人脸的存在。如果希望提高检测的准确率,可以将该值设置的更大,但同时可能会让一些人脸无法被检测到

flags:不常用参数,一般省略。

minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略

maxSize:目标的最大尺寸,大于这个尺寸的目标将被忽略

该函数的返回值是目标对象的矩形框向量组。

检测图像中的N个人脸

既然我们已经了解了人脸检测函数。下面,我们就来使用其检测图像中的人脸,具体代码如下所示:

import cv2

img = cv2.imread("41.jpg")
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=2, minSize=(5, 5))
print(faces)
print("该图一共有{0}人脸".format(len(faces)))
for (x, y, w, h) in faces: cv2.circle(img, (int((2 * x + w) / 2), int((2 * y + h) / 2)), int(w / 2), (0, 255, 0), 2)
cv2.imshow("result", img)
cv2.waitKey()
cv2.destroyAllWindows()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

OpenCV已经自带了人脸的Haar特征分类器,该分类器有20多种,提供多种对象的检测功能,比如有鼻子,有耳朵等。这里我们选择haarcascade_frontalface_default.xml人脸识别分类器。

通过detectMultiScale函数返回的是人脸的矩形框向量组,包括左上角坐标(x,y),长宽(w,h)。而绘制人脸圆形框只需要将矩形的中心设置为圆心,矩形的宽度一般设置为半径即可。

运行之后,我们可以识别行尸走肉图像中的人脸:

人脸识别
测试原图为:
原图

文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。

原文链接:liyuanjinglyj.blog.csdn.net/article/details/114437210

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。