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

cv2.cvtColor报错(-215):图片转换失败的技术问题求助

解决cv2.cvtColor报错:!_src.empty()的问题

这个报错的核心原因是传入cv2.cvtColor的图片对象是空的——也就是cv2.imread没有成功加载图片。大概率是你遍历ImagesAttendance文件夹时,把非图片文件(比如隐藏文件、配置文件)也读进来了,或者路径拼接出了问题。

修复步骤及代码修改

  1. 只保留文件夹里的图片文件,过滤非图片格式的内容
  2. 用os.path.join拼接路径,避免跨系统的路径分隔符问题
  3. 每次加载图片后检查是否成功,避免空对象进入后续流程

修改后的代码如下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:10:21