OpenCV报错(-215:Assertion failed) !_src.empty()于cv::cvtColor函数的解决咨询
解决OpenCV人脸检测中
cv::cvtColor断言失败(!_src.empty())的问题 我刚踩过一模一样的坑,一眼就能看出问题核心:cv2.imread读取test.jpg失败,导致img为空对象,后续调用cv2.cvtColor时自然触发了断言错误。下面是我亲测有效的解决步骤:
先明确错误来源
Build\OpenCV\opencv-4.4.0\modules\imgproc\src\color.cpp:182: 错误: (-215:断言失败) !_src.empty() 于函数'cv::cvtColor'中。
这个错误直白地告诉你:要转换颜色的输入图像是空的,根本没读到内容。
具体解决方案
1. 先排查图片路径问题
这是最常见的原因:
- 确认图片和代码文件在同一个目录,且文件名完全匹配(注意大小写!Linux/macOS下
Test.jpg和test.jpg是两个不同文件) - 不确定路径的话,直接用绝对路径替代相对路径,比如:
# Windows示例 img = cv2.imread('C:/Users/你的用户名/Desktop/test.jpg') # Linux/macOS示例 img = cv2.imread('/home/你的用户名/Desktop/test.jpg')
2. 验证图片文件本身是否正常
- 手动打开
test.jpg,确认图片没有损坏、下载不完整的情况 - 可以换一张系统自带的测试图片(比如Windows的
Sample Pictures里的图片)快速验证
3. 在代码中添加读取校验(推荐)
给代码加个判断,提前拦截读取失败的情况,避免后续报错:
import cv2 # 加载级联分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 读取输入图像 img = cv2.imread('test.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() cv2.destroyAllWindows() # 记得加这个,避免窗口卡住不关闭
额外提醒:分类器路径也要确认
如果后续还是有问题,检查haarcascade_frontalface_default.xml的路径是否正确——可以把它的绝对路径写上,或者确认它在代码的运行目录里。
内容的提问来源于stack exchange,提问作者Vuki
相关产品推荐
相关产品推荐

