使用scipy处理图片时报output shape not correct运行时错误如何解决?
错误原因
scipy.ndimage.filters.laplace要求输入为数值型numpy数组,代码中直接传入PILImage对象是报错的核心诱因。一周前可正常运行通常有两种可能:一是当时使用的scipy版本支持PIL对象隐式转换为数组,版本更新后该隐式兼容特性被移除;二是此前数据集第一张图片为单通道灰度图,当前该位置的图片被替换为三通道RGB或四通道RGBA图,旧版本隐式转换仅兼容单通道数据,多通道数据会触发shape校验失败。- 小概率场景为PIL依赖版本更新,
Image.open返回的对象结构发生变更,无法被scipy滤波函数自动识别解析。
修复方案
- 优先选择兼容性最强的显式转换方案,将PIL Image对象转为numpy数组后再传入滤波函数,修改对应代码行即可:
# 替换原lap计算行 lap = scipy.ndimage.filters.laplace(np.array(image_list_Brownspot[0]))
- 若转换后仍报错,可在读取图片时统一转为单通道灰度图,避免多通道shape异常:
# 替换循环内的Image.open行 im = Image.open(filename).convert('L')
- 若确定是scipy版本更新导致的兼容问题,也可回退到此前正常运行的版本,执行命令:
pip install scipy==<历史版本号>,该方案不推荐长期使用。
内容的提问来源于stack exchange,提问作者Amit Khan
相关产品推荐
相关产品推荐

