• OpenCV3 视频中的人脸检测


    视频里的人脸检测跟静态图片中的差不多,只是需要调用摄像头。

    import cv2
    def detect():                       
        face_cascade  = cv2.CascadeClassifier(
            'cascades/haarcascade_frontalface_default.xml')
        eye_cascade = cv2.CascadeClassifier(
            'cascades/haarcascade_eye.xml')
        camera = cv2.VideoCapture(0)    #初始化摄像头,参数传递的是要使用的第几个摄像头
    
        while True:
            ret, frame = camera.read()  #read()函数返回两个值,第一个布尔值用于判断是否检测到帧,第二个为帧
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #捕捉到帧后将其转为灰度图像(OpenCV基于灰度色彩空间)
    
            faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
            for  (x, y, w, h) in faces:
                img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 蓝色矩形框
                eyes = eye_cascade.detectMultiScale(gray, 1.2, 5,0,(5,5))       #直接传值的话需要多传一个flags值,否则报错
    
                font = cv2.FONT_ITALIC          
                cv2.putText(frame, 'xzb', (x -10, y - 10), font, 1, (255, 0, 255), 2)
                #在人脸框上显示文本1-图片,2-文本,3-位置,4-字体,5-大小,6-颜色,7-线宽
    
                for (ex, ey, ew, eh) in eyes:
                    cv2.rectangle(img, (ex,ey),(ex+ew,ey+eh),(0,255,0),2)   #绿色矩形框
    
                cv2.imshow('camera',frame)
    
            if cv2.waitKey(100) & 0xff == ord ('q'):
                break
    
        camera.release()
        cv2.destroyAllWindows()
    
    if __name__ =='__main__':        
        detect()

     结果:

    face_cascade  = cv2.CascadeClassifier(
            'cascades/haarcascade_frontalface_default.xml')
        eye_cascade = cv2.CascadeClassifier(
            'cascades/haarcascade_eye.xml')

     这里加载了两个分类器,一个是用于检测脸,一个是检测眼睛

    camera = cv2.VideoCapture(0)

    初始化摄像头,参数传递的是要使用的第几个摄像头

            for  (x, y, w, h) in faces:
                img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 蓝色矩形框
                eyes = eye_cascade.detectMultiScale(gray, 1.2, 5,0,(5,5))  #直接传值的话需要多传一个flags值,否则报错
                font = cv2.FONT_ITALIC          #字体
                cv2.putText(frame, 'xzb', (x -10, y - 10), font, 1, (255, 0, 255), 2)
                #在人脸框上显示文本1-图片,2-文本,3-位置,4-字体,5-大小,6-颜色,7-线宽
    
                for (ex, ey, ew, eh) in eyes:
                    cv2.rectangle(img, (ex,ey),(ex+ew,ey+eh),(0,255,0),2)   #绿色矩形框
    cv2.imshow('camera',frame)

     这里是将每一帧检测到脸的图片进行眼睛检测。这样相比整张图片检测眼可以减少计算量,提高运算速度。

            if cv2.waitKey(100) & 0xff == ord ('q'):
                break
    
        camera.release()
        cv2.destroyAllWindows()
    
    if __name__ =='__main__':         
        detect()

     输入q退出,不然摄像头一直会调用。

    if __name__ =='__main__':         
        detect()是为了防止这个py文件被导入时执行。

    总的来说视频检测与图像检测没有太大区别,就是将视频分割成一帧帧图片再进行处理。
  • 相关阅读:
    iOS SQLite函数总结
    转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
    NSUserDefaults保存用户名和密码
    iOS 集成银联支付(绕过文档的坑,快速集成)-转
    iOS微信支付
    iOS生成PDF的关键代码-备忘
    python中的urlencode和urldecode
    python中%r和%s的区别
    ubuntu16.04安装wps
    二进制、八进制、十进制、十六进制之间的转换
  • 原文地址:https://www.cnblogs.com/xzb0-0/p/10246858.html
Copyright © 2020-2023  润新知