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

如何直接将图片加载为numpy ndarray?替代已弃用的scipy.misc.imread

解决方法:无需额外转换直接获取numpy数组的替代方案

你提到的问题确实是scipy.misc.imread弃用后常见的小困扰,除了OpenCV,这里有几个优雅的方案可以直接加载图片为numpy.ndarray:

方案1:使用imageio的兼容接口

imageio的新版默认imread返回封装后的Image对象,但它保留了兼容旧行为的v2接口,直接调用就能得到numpy数组:

import imageio
img = imageio.v2.imread('./myimage.jpg')
type(img)
>>> numpy.ndarray

这个接口完全复刻了旧scipy方法的行为,甚至支持相同的参数(比如flatten),迁移成本很低。

方案2:使用Matplotlib的图片读取函数

Matplotlib的imread方法从一开始就直接返回numpy数组,用法和你之前的scipy代码几乎一致:

# 两种导入方式都可以
from matplotlib import image as mpimg
img = mpimg.imread('./myimage.jpg')

# 或者通过pyplot导入
import matplotlib.pyplot as plt
img = plt.imread('./myimage.jpg')

type(img)
>>> numpy.ndarray

需要注意的是,Matplotlib读取jpg时默认会将像素值归一化到0-1之间(浮点数类型),而scipy和imageio默认返回0-255的整数类型,如果需要和旧行为完全一致,可以加上参数:

img = mpimg.imread('./myimage.jpg', format='jpg')

这样就能得到uint8类型的数组了。

方案3:Pillow配合numpy的简洁写法

虽然你提到显式转换不够优雅,但Pillow其实可以和numpy结合得很简洁,一行代码就能完成:

from PIL import Image
import numpy as np

img = np.asarray(Image.open('./myimage.jpg'))
type(img)
>>> numpy.ndarray

np.asarray比np.array更轻量(不会复制数据,只是创建数组视图),如果你的图片较大,这个写法在性能上反而更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:47