zoukankan      html  css  js  c++  java
  • 利用OpenCV在图片和摄像头中检测人脸

    本文主要介绍了如何利用OpenCV检测图片或摄像头视频中的人脸。

    1 检测图片中人脸

    import numpy as np
    import cv2
    
    #定义检测函数
    def detect(img):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        #定义级联检测器,并检测
        face_cascade = cv2.CascadeClassifier("cascades/haarcascade_frontalface_default.xml")
        faces = face_cascade.detectMultiScale(gray, 1.1, 5)
        #显示检测到的人脸
        for (x,y,w,h) in faces:
            img = cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2)
        
        cv2.imshow("img", img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    #读入一张照片并检测
    img1 = cv2.imread("../fahai.jpg")
    detect(img1)
    

    2 从摄像头视频中检测人脸和眼睛

    #定义视频检测人脸函数
    def video_detect(cap, window, videoWriter): #(视频流对象,显示窗口,写出流对象)
        #定义级联检测器
        face_cascade = cv2.CascadeClassifier("cascades/haarcascade_frontalface_default.xml")
        eye_cascade = cv2.CascadeClassifier("cascades/haarcascade_eye.xml")
        
        ret, frame = cap.read() #提取一帧图像
        while(ret and cv2.waitKey(1)==-1):
            #对提取到的一帧图像进行检测
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            faces = face_cascade.detectMultiScale(gray, 1.1, 5)
            
            #将检测框标在图像中
            for (x,y,w,h) in faces:
                frame = cv2.rectangle(frame, (x,y), (x+w,y+h), (0,0,255), 2)
                #从提取到的人脸中检测眼睛
                roi = gray[y:y+h, x:x+w]
                eyes = eye_cascade.detectMultiScale(roi, 1.03, 5, 0, (40,40))
                #将眼睛检测框画到图像中
                for (ex,ey,ew,eh) in eyes:
                    frame = cv2.rectangle(frame,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(0,255,0),2)
                
            cv2.imshow(window, frame) #显示图像
            videoWriter.write(frame) #图像保存
            ret, frame = cap.read()
    
    
    
    import cv2 
    
    cv2.namedWindow("myWindow") #创建一个窗口
    #创建视频流对象和写出流对象
    cap = cv2.VideoCapture(0)
    fps = 15
    size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    videoWriter = cv2.VideoWriter('myvideo2.mp4', 
                                  cv2.VideoWriter_fourcc(*'mpeg'), fps, size)
    #也可以写成字符格式cv2.VideoWriter_fourcc('m','p','4','v')
    
    #开始检测
    video_detect(cap, "myWindow", videoWriter)
    #释放资源
    cap.release()
    videoWriter.release()
    cv2.destroyAllWindows()
    

    小结:

  • 相关阅读:
    [linux1exe元旦特供]基于wine的IE6一键安装
    http://www.tianya.cn/publicforum/content/funinfo/1/1869814.shtml
    最全的design pattern 概述
    例解 autoconf 和 automake 生成 Makefile 文件
    根据条件分组SQL
    SQL Express自动备份
    通过asp.net 短信猫发短信
    EXT.NET GridPanel(按键事件带参的另一种写法)
    Asp.net操作IIS(调试通过)
    面向接口编程详解——编程实例(T2噬菌体)
  • 原文地址:https://www.cnblogs.com/inchbyinch/p/12556113.html
Copyright © 2011-2022 走看看