You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:56:14