系列文章目录
Python 检测学习:人脸检测与抓捕
前言
使用Python和OpenCV检测人脸是一个常见的计算机视觉任务。
一、项目需求
python opencv检测人脸代码,要求:使用计算机自带的摄像头进行实时抓捕与检测,并且框出人脸范围
二、使用步骤
1.源代码
代码如下(示例):
import cv2
# 加载Haar级联人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 启动摄像头
cap = cv2.VideoCapture(0) # 参数0通常表示默认的摄像头
if not cap.isOpened():
print("无法打开摄像头")
exit()
while True:
# 读取摄像头的帧
ret, frame = cap.read()
if not ret:
print("无法读取帧")
break
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
# 在检测到的人脸周围绘制矩形框
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 显示结果
cv2.imshow('Real-time Face Detection', frame)
# 按'q'退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头
cap.release()
# 关闭所有OpenCV窗口
cv2.destroyAllWindows()
2.代码分析
分析如下:
-
加载Haar级联分类器:
使用CascadeClassifier加载OpenCV自带的Haar级联人脸检测器。 -
启动摄像头:
使用cv2.VideoCapture(0)启动默认摄像头。参数0表示第一个摄像头设备。 -
读取和处理帧:
在循环中,使用cap.read()从摄像头读取每一帧。然后使用cv2.cvtColor将帧转换为灰度图像,因为人脸检测通常在灰度图像上进行。 -
检测人脸:
使用detectMultiScale方法在灰度帧中检测人脸。 -
绘制矩形框:
对检测到的每个人脸,使用cv2.rectangle在帧上绘制矩形框。 -
显示和退出:
使用cv2.imshow显示带有人脸矩形框的帧。循环将持续进行,直到用户按下’q’键。使用cv2.waitKey(1)设置窗口响应按键的时间间隔为1毫秒。 -
释放资源:
循环结束后,使用cap.release()释放摄像头资源,使用cv2.destroyAllWindows()关闭所有OpenCV创建的窗口。
总结
以上就是今天要讲的内容,本文代码将打开你的摄像头,并在窗口中显示实时视频流,同时在检测到的人脸上绘制矩形框。按’q’键可以退出程序。