python中基于OpenCV的人脸检测的详细理解

python中基于OpenCV的人脸检测的草鸡详细理解
一个电脑小白的自我成长之路^_*

OpenCV中有联级分类器,cv2.CascadeClassifier(),括号中添加已经训练好的相应的分类器。特征分类在OpenCV中安装目录的data\haarcascades目录下(有眼睛,眼镜,正脸快速分类,正脸默认分类等):

haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_lowerbody.xml
haarcascade_mcs_eyepair_big.xml
haarcascade_mcs_eyepair_small.xml
haarcascade_mcs_leftear.xml
haarcascade_mcs_lefteye.xml
haarcascade_mcs_mouth.xml
haarcascade_mcs_nose.xml
haarcascade_mcs_rightear.xml
haarcascade_mcs_righteye.xml
haarcascade_mcs_upperbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_smile.xml
haarcascade_upperbody.xml

detectMultiScale函数。

detectMultiScale(scr, double scaleFactor=1.1, int minNeighbors = 3,int flags = 0,/
                  Size minSize = Size(), Size maxSize = Size())

它可以检测出图片中所有的人脸,并将人脸用一个4维向量保存各个人脸的起始坐标(x, y)、大小(用矩形表示)即返回[[x, y, w, h]],函数由分类器对象调用:

face_cascade = cv.CascadeClassifier(r'.\\haarcascade_frontalface_default.xml')
face = face_cascade.detectMultiScale(img_gray, 1.1, 3,)

函数介绍:

参数1:image–待检测图片,一般为灰度图像加快检测速度;
参数2:scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
参数3:minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。
如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上;
参数4:flags–要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为

    CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,

    因此这些区域通常不会是人脸所在区域;

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

下面是完整的人脸检测代码:

# 作者:小白
# 项目:人脸检测
# 邮箱:2917807282@qq.com
# 时间:20200.8.19

import cv2 as cv

face_cascade = cv.CascadeClassifier(r'.\\haarcascade_frontalface_default.xml')


img = cv.imread('liuyifei.jpg')
img_resize = cv.resize(img, (320, 480))
img_gray = cv.cvtColor(img_resize, cv.COLOR_RGB2GRAY)
cv.imshow('img', img_resize)      # 显示原图



face = face_cascade.detectMultiScale(img_gray, 1.1, 3,)
print(face[0])
# 标记位置

for x, y, w, h in face:

    img1 = cv.rectangle(img_resize, (x, y), (x+w, y+h), (255, 0, 0), 2)


    cv.imshow('img1', img1)        # 显示检测到人脸的图
    cv.waitKey(0)

    cv.destroyAllWindows()

在这里插入图片描述
如果找不到分类器文件的,可以私下加我,找我要》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值