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

OpenCV Python人脸检测代码运行cvtColor函数断言失败如何解决?

错误原因
  • 报错核心是cv::cvtColor输入校验失败,!_src.empty()说明你传入的源图像img是空值,cv2.imread没有成功读取到图片内容。
  • 触发img为空的常见场景:
    • terry.jpg没有存放在代码运行的工作目录,文件路径不匹配
    • 文件名拼写错误,包括后缀名不符、大小写不匹配
    • 图片文件本身损坏,无法被OpenCV解析
  • 你的代码还存在另外两处可触发报错的问题:
    • 人脸检测API拼写错误,detectMultiscale应为detectMultiScale(第二个S大写)
    • for循环下的cv2.rectangle没有缩进,会触发Python语法错误
修复方案
  • 第一步:修复图片读取失败问题
    优先使用绝对路径读取图片,同时增加读取结果校验,避免空值传入后续流程,示例代码:
    # 路径前加r避免反斜杠转义问题
    img = cv2.imread(r'C:\Users\hp\Desktop\face detection\terry.jpg')
    # 新增读取校验
    if img is None:
        print("图片读取失败,请检查文件路径、文件名是否正确,文件是否损坏")
        exit()
    
    也可以直接把terry.jpg文件放到和sample.py相同的文件夹下,使用相对路径读取。
  • 第二步:修复代码其他错误
    1. 修正API拼写:将face_cascade.detectMultiscale改为face_cascade.detectMultiScale
    2. 补全for循环缩进:cv2.rectangle前加4个空格缩进
    3. 建议同步增加级联分类器加载校验,避免xml文件读取失败的问题:
    face_cascade = cv2.CascadeClassifier(r'C:\Users\hp\Desktop\face detection\haarcascade_frontalface_default.xml')
    if face_cascade.empty():
        print("级联分类器加载失败,请检查xml文件路径")
        exit()
    
修复后完整代码
import cv2

# 加载人脸级联分类器
face_cascade = cv2.CascadeClassifier(r'C:\Users\hp\Desktop\face detection\haarcascade_frontalface_default.xml')
if face_cascade.empty():
    print("级联分类器加载失败,请检查xml文件路径")
    exit()

# 读取输入图片
img = cv2.imread(r'C:\Users\hp\Desktop\face detection\terry.jpg')
if img is None:
    print("图片读取失败,请检查文件路径、文件名是否正确,文件是否损坏")
    exit()

# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

# 绘制人脸矩形框
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 展示结果
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者FILZA ALAM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:03