OpenCV调用cvtColor报(-215:Assertion failed)!_src.empty()错误求助
错误原因
- 报错信息中的
!_src.empty() in function 'cvtColor'表示OpenCV执行颜色转换时输入的源图像为空,不存在有效数据 - 导致图像为空的直接原因是代码中路径拼接错误:
curImg = cv2.imread(f"{path} / {cl}")这行代码在路径和文件名之间额外添加了空格,生成的文件路径与实际存储路径不匹配,cv2.imread读取不存在的路径时会静默返回None而非抛出异常,后续对空对象执行颜色转换就触发了报错。
解决方案
- 修正路径拼接逻辑,优先使用
os.path.join实现跨平台的路径拼接,避免手动写分隔符时出现符号、空格错误:
将原代码中的
curImg = cv2.imread(f"{path} / {cl}")
替换为:
curImg = cv2.imread(os.path.join(path, cl))
- 增加图像读取校验逻辑,提前拦截读取失败的情况,避免后续处理异常:
for cl in myList: curImg = cv2.imread(os.path.join(path, cl)) # 新增读取校验 if curImg is None: print(f"读取文件{cl}失败,请检查文件是否存在") continue images.append(curImg) classNames.append(os.path.splitext(cl)[0])
- 可选优化:后续调用
face_recognition.face_encodings时可增加返回结果长度校验,避免图片中没有人脸导致的索引报错。
内容的提问来源于stack exchange,提问作者Imdadul Haque
相关产品推荐
相关产品推荐

