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

如何让scikit-image返回无负步长的连续数组?

解决Scikit-Image imread读取图像负步长导致PyTorch ToTensor报错问题

问题根源

你碰到的负步长数组,是因为Scikit-Image默认解码器读取部分图像(比如存储顺序为底行在前的格式)时,会返回一个垂直翻转的视图而非副本(节省内存),但PyTorch的ToTensor()不支持带负步长的非连续数组。从你的数组属性看,当前img是另一个形状为(3024, 4032, 3)数组的视图,负步长对应行方向的逆序访问。

无需创建副本的解决方案

指定PIL插件读取图像

Scikit-Image的imread支持通过plugin参数指定读取后端,用PIL插件读取的图像默认返回连续数组(无负步长),从根源避免问题,无需额外复制:

import skimage.io as io

# 用PIL插件读取图像
img = io.imread("你的图像路径", plugin='pil')

# 验证数组是否连续(输出应为True)
print(f"是否连续: {img.flags.contiguous}")

额外说明

如果必须使用默认插件(如imageio),部分图像格式确实无法避免非连续视图,此时只能通过copy()或np.ascontiguousarray()创建副本,但这是你想避免的情况,因此优先推荐更换为PIL插件读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:35:32