本文主要介绍了如何利用 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, Windows, 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(Windows, 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()
小结:
detectMultiScale 用法
视频可以转成各种格式, 注意 cv2.VideoWriter 中文件后缀和 fourcc 格式 (('m','p','4','v') 格式的视频占用空间更小)
来源: http://www.bubuko.com/infodetail-3475381.html