基于MTCNN的人脸检测:如何在原帧绘制人脸Bounding Box
正确的MTCNN人脸检测+Bounding Box绘制实现
首先确保依赖包已安装:
pip install mtcnn opencv-python
核心实现代码
import cv2 from mtcnn import MTCNN # 初始化MTCNN检测器 detector = MTCNN() # 打开默认摄像头 cap = cv2.VideoCapture(0) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 执行人脸检测,获取完整检测结果 results = detector.detect_faces(frame) # 遍历每一个检测到的人脸 for result in results: # 提取原帧中的人脸边界框参数:x1(左), y1(上), w(宽), h(高) x1, y1, w, h = result['box'] # 计算边界框右下角坐标 x2 = x1 + w y2 = y1 + h # 在原帧上绘制红色边界框,线宽为2 cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2) # 若需提取人脸小帧,直接从原帧切片获取 face = frame[y1:y2, x1:x2] # 显示带边界框的视频帧 cv2.imshow('Face Detection', frame) # 按Q键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows()
关键说明
- MTCNN的
detect_faces()方法会直接返回包含人脸位置的完整结果,无需从裁剪后的人脸小帧反推坐标。每个检测结果是一个字典,其中'box'字段对应的值就是人脸在原帧中的位置参数。 cv2.rectangle()需要传入矩形的两个对角点坐标:左上角(x1, y1)和右下角(x2, y2),通过x2 = x1 + w、y2 = y1 + h即可计算得到。- 人脸小帧可直接通过原帧的切片操作
frame[y1:y2, x1:x2]获取,同时保留边界框坐标用于绘制。
内容的提问来源于stack exchange,提问作者Captain C
相关产品推荐
相关产品推荐

