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

Colab无法加载图片目录,调用cv2.cvtColor报_src.empty()断言错误

报错原因

error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

这个报错的核心是cvtColor接收的输入图片为空,触发了OpenCV的参数校验断言,具体触发原因有三类:

  • 读取API使用错误:imread_collection是scikit-image提供的批量读取图片接口,返回值为图片集合迭代对象,不是单张图片数组。你直接把集合对象转成float32传入cvtColor,传入的内容不符合单张图片的格式要求,本质等于传入空值。
  • 路径/文件异常:你导入的zip文件没有正确解压到目标路径,或者self.img_IDs[i]对应的文件名拼写错误、图片本身损坏、格式不被OpenCV支持,读取不到有效像素内容。
  • 格式匹配错误:imread_collection默认读取的图片为RGB通道顺序,你用COLOR_BGR2RGB做转换属于逻辑错误,也可能触发格式校验异常。
修复方案

方案1:替换为cv2单张读取逻辑(推荐)

如果你只需要读取单张图片,直接用cv2.imread即可,读前先做有效性校验:

import os
import cv2
import numpy as np

img_path = os.path.join(self.img_dir, self.img_IDs[i])
# 先校验路径是否存在
if not os.path.exists(img_path):
    print(f"跳过不存在的文件:{img_path}")
    # 后续加跳过当前样本的逻辑即可
    continue
# 读取图片
img = cv2.imread(img_path)
# 校验图片是否读取成功
if img is None:
    print(f"跳过损坏的图片:{img_path}")
    continue
# 通道转换
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

方案2:保留imread_collection的正确用法

如果必须使用imread_collection读取,需要从集合中取出单张图片,且不需要额外做BGR转RGB的操作:

from skimage.io import imread_collection
import os

img_path = os.path.join(self.img_dir, self.img_IDs[i])
img_col = imread_collection(img_path)
if len(img_col) == 0:
    print(f"跳过无有效内容的文件:{img_path}")
    continue
# 取集合中的第一张单图
img = img_col[0]
# imread_collection默认返回RGB格式图片,可直接使用

方案3:批量处理加异常捕获

如果是批量抽取图片,可加异常捕获避免单张图片异常打断整个流程:

try:
    img_path = os.path.join(self.img_dir, self.img_IDs[i])
    img = cv2.imread(img_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
except cv2.error as e:
    print(f"处理图片{img_path}失败,错误信息:{e}")
    # 跳过当前异常样本
    continue

内容的提问来源于stack exchange,提问作者Akshada Pradhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:57:01