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

使用OpenCV绘制人脸与人体检测框时出现'faces'未定义错误

OpenCV人脸/人体检测框绘制:NameError错误修复

问题重现

运行人脸和人体检测框绘制代码时触发NameError,代码如下:

while True:
    _, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    bodies = body_cascade.detectMultiScale(gray, 1.3, 5)
 # draws box on faces
    for (x, y, width, height) in faces:
        cv2.rectangle(frame, (x, y), (x + width, y + height), (255, 0, 0,), 3)

    for (x, y, width, height) in bodies:
        cv2.rectangle(frame, (x, y), (x + width, y + height), (255, 0, 0,), 3)

报错内容:

for (x, y, width, height) in faces:
NameError: name 'faces' is not defined

错误原因

出现该错误的核心是:执行到for循环时,faces变量并未被成功定义。常见诱因包括:

  • 级联分类器未加载:缺失face_cascade = cv2.CascadeClassifier(...)代码,或分类器文件路径错误,导致detectMultiScale执行失败
  • 帧读取失败:cap.read()未成功获取视频帧,frame为空,后续cv2.cvtColor报错,中断了faces变量的赋值流程

修复步骤

1. 正确加载级联分类器

在代码开头添加分类器加载逻辑,使用OpenCV自带的预训练模型:

# 加载人脸与人体检测的级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
body_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

cv2.data.haarcascades会直接指向OpenCV安装目录下的haarcascades文件夹,无需手动填写路径。

2. 添加帧有效性判断

在处理帧前检查读取状态,避免空帧导致后续代码报错:

while True:
    ret, frame = cap.read()
    # 帧读取失败时退出循环
    if not ret:
        break
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    bodies = body_cascade.detectMultiScale(gray, 1.3, 5)
    
    for (x, y, width, height) in faces:
        cv2.rectangle(frame, (x, y), (x + width, y + height), (255, 0, 0), 3)
    
    for (x, y, width, height) in bodies:
        cv2.rectangle(frame, (x, y), (x + width, y + height), (255, 0, 0), 3)

3. 修正语法小问题

原代码中颜色参数(255, 0, 0,)多了一个冗余逗号,建议修正为(255, 0, 0),避免潜在语法问题。

内容的提问来源于stack exchange,提问作者Toshiro Nakamoto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:54:26