opencv人脸识别(二)人脸检测

前面一文我们介绍了电脑打开摄像头,没基础的小伙伴可以点下面链接去看看

 

opencv人脸识别(一)调用笔记本摄像头

本文我将介绍opencv人脸检测,我使用的是LBP特征级联分类器,这个模型是2016年12月21日上传的,使用 OpenCV 的级联分类器 CascadeClassifier加载预训练模型lbpcascade_frontalface_improved.xml,这个模型我放在了迅雷网盘上的地址如下:

链接:https://pan.xunlei.com/s/VN3KgTfLTRfTHox3_bizI4mBA1
提取码:35qw

人脸识别流程:

f0dd92a539ec44648a7e7ca749568f0e.png

 

代码演示:

import cv2
import time
#加载训练模型
face_detect=cv2.CascadeClassifier(r"./data1/lbpcascade_frontalface_improved.xml")
cap=cv2.VideoCapture(0)
while cap.isOpened():
    #读取摄像头画面
    frla,img=cap.read()
    #画面翻转y轴
    img=cv2.flip(img,1)
    #视频图片经过灰色处理后只有黑白两种颜色,像素的位置并不会改变,便于像素识别
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #进行人脸检测
    faces = face_detect.detectMultiScale(
        img_gray, #进行检测的灰度图片
        scaleFactor=1.02,#将检测图片放大1.02被
        minNeighbors=5)#表示构成检测目标的相邻矩形的最小个数(默认为3个),这里设置了5个。
    #判断是否有人脸
    if len(faces):
        #遍历检测到的人脸
        for x,y,w,h in faces:
            #绘制人脸矩形框
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    if cv2.waitKey(30) & 0xff == ord('q'):
        break
    if cv2.waitKey(30)&0xff == ord('s'):#按s键保存图片
        timer=time.time()#获取时间戳
        name=str(int(timer))+".jpg"#将时间戳转换成字符串类型和.jpg拼接,用作下一步的保存图片的名字
        cv2.imwrite(name,img)#保存图片
        print("图片保存成功")
    #显示人脸
    cv2.imshow("face",img)
#释放摄像头
cap.release()
#销毁窗口
cv2.destroyAllWindows()
detecMultiScale()

        opencv中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示)所以我们遍历返回的人脸数据faces就可以使用opencv中的rectangle()方法绘制人脸矩形框,函数由分类器对象调用。

函数的相关参数介绍:

参数说明
image待检测图片,使用灰度图识别效果好
objects表示检测到的人脸目标序列
scaleFactor表示每次图像尺寸减小的比例
minNeighbors表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸),
flags

要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为

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

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

minSize目标最小尺寸
maxSize目标最大尺寸
cv2.rectangle(img, pt1, pt2, color, thickness)

rectangle()经常使用的参数:

参数说明
img要操作的图片
pt1矩形框的左上角坐标
pt2矩形框的右下角坐标
color矩形框线条颜色
thickness矩形框的线条粗细

我使用女神做了测试,我们看看效果:

6e2fe6a118574251804d3cd07276bf74.gif

 我编写的一个opencv人脸识别案例:地址YueXia/Face-opencv - 码云 - 开源中国 (gitee.com)

个人博客网站,灵动空间,欢迎访问

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值