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

