Python OpenCV 实例:摄像头人脸检测与截图

需积分: 3 1 下载量 33 浏览量 更新于2024-08-04 收藏 90KB PDF 举报
本文档主要介绍了如何使用Python和OpenCV库来调用摄像头进行人脸识别并截图。关键知识点包括OpenCV库的导入、摄像头的捕获、人脸识别模型的使用以及图像处理与保存。 在Python中,OpenCV是一个强大的计算机视觉库,用于处理图像和视频数据。要调用摄像头检测人脸并截图,首先需要确保已经安装了OpenCV库。这可以通过运行`pip install opencv-python`命令来完成。 接下来,我们需要一个预训练的人脸检测模型,例如`haarcascade_frontalface_alt.xml`。这个模型是OpenCV提供的Haar级联分类器,用于检测图像中的人脸。该模型可以从OpenCV的相关资源库中下载。 以下是一个简单的Python代码示例,演示了如何使用OpenCV实现这一功能: ```python # 导入必要的库 import cv2 # 定义函数,捕获摄像头视频并截图 def catch_pic_from_video(window_name, camera_idx, catch_pic_num, path_name): cv2.namedWindow(window_name) # 创建一个窗口 cap = cv2.VideoCapture(camera_idx) # 初始化摄像头 # 加载人脸识别分类器 classifier = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") # 设置边框颜色 color = (0, 255, 0) num = 0 while cap.isOpened(): ok, frame = cap.read() # 读取一帧 if not ok: break grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将帧转换为灰度图像 # 使用分类器进行人脸检测 face_rects = classifier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) if len(face_rects) > 0: # 如果检测到人脸 for face_rect in face_rects: x, y, w, h = face_rect # 截图并保存 img_name = f"{path_name}/{num}.jpg" img = frame[y:y+h, x:x+w] cv2.imwrite(img_name, img) num += 1 cv2.imshow(window_name, frame) # 显示当前帧 if cv2.waitKey(1) & 0xFF == ord('q'): # 按'q'键退出 break cap.release() cv2.destroyAllWindows() # 调用函数,捕获100张人脸截图并保存到指定路径 catch_pic_from_video("Face Detection", 0, 100, "screenshots") ``` 在这个例子中,`catch_pic_from_video`函数打开一个名为"Face Detection"的窗口,并捕获摄像头(默认为设备索引0)的视频流。`detectMultiScale`方法用于在灰度图像上检测人脸,返回一组矩形坐标,表示检测到的人脸区域。如果检测到人脸,程序会截取该区域并保存为JPEG图片。 此外,`cv2.waitKey(1) & 0xFF == ord('q')`检查用户是否按下了'q'键,如果按下,则退出循环并释放摄像头资源。`cv2.destroyAllWindows()`关闭所有OpenCV创建的窗口。 通过这段代码,开发者可以轻松地实现在Python中使用OpenCV调用摄像头进行实时人脸识别并截图的功能。这对于监控、人流量统计或者人脸识别系统开发等应用场景非常有用。