cv2.cvtColor报错(-215):图片转换失败的技术问题求助
解决cv2.cvtColor报错:!_src.empty()的问题
这个报错的核心原因是传入cv2.cvtColor的图片对象是空的——也就是cv2.imread没有成功加载图片。大概率是你遍历ImagesAttendance文件夹时,把非图片文件(比如隐藏文件、配置文件)也读进来了,或者路径拼接出了问题。
修复步骤及代码修改
- 只保留文件夹里的图片文件,过滤非图片格式的内容
- 用
os.path.join拼接路径,避免跨系统的路径分隔符问题 - 每次加载图片后检查是否成功,避免空对象进入后续流程
修改后的代码如下:
import os import cv2 import face_recognition path = 'ImagesAttendance' known_images = [] classNames = [] myList = os.listdir(path) # 定义支持的图片格式 image_extensions = ['.png', '.jpg', '.jpeg', '.bmp'] for cls in myList: # 过滤非图片文件 file_ext = os.path.splitext(cls)[1].lower() if file_ext not in image_extensions: continue # 用os.path.join拼接路径,避免跨系统问题 img_path = os.path.join(path, cls) curImg = cv2.imread(img_path) # 检查图片是否加载成功 if curImg is not None: known_images.append(curImg) classNames.append(os.path.splitext(cls)[0]) else: print(f"无法加载图片:{img_path}") print(classNames) def find_encodings(images): encode_list = [] for img in images: img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 确保能检测到人脸再编码,避免索引报错 face_encodes = face_recognition.face_encodings(img) if face_encodes: encode = face_encodes[0] encode_list.append(encode) else: print("未检测到人脸,跳过该图片") return encode_list encodeListKnown = find_encodings(known_images)
额外提示
- 如果还是报错,检查
ImagesAttendance文件夹的路径是否正确(比如是否和脚本在同一目录下) - 确保文件夹里的图片没有损坏,能正常打开
- 可以先打印
myList看看里面的内容,确认有没有非图片文件混入
内容的提问来源于stack exchange,提问作者Kenneth Arcasitas
相关产品推荐
相关产品推荐

