使用PIL将RGB图像转换为(H,W,3)numpy阵列非常快。
im = np.array(PIL.open(path))
但是,我找不到快速方式将灰度图像转换为(H,W,1)数组。我尝试了两种方法,但它们都比上面慢得多:
im = np.array(PIL.open(path)) # return an (H, W) array
im = np.expand_dims(im, axis=0)
im = im.astype(int)
这种方法也很慢:
img = PIL.open(path)
im = np.array(img.getdata()).reshape(img.size[1], img.size[0], 1)
请建议......
答案 0 :(得分:1)
您可以使用np.asarray()
获取数组视图,然后使用None/np.newaxis
附加新轴,然后使用设置为copy
的{{1}}进行类型转换(如果您正在转换为相同的dtype以节省内存) -
False
这会在开始时追加新轴,从而导致im = np.asarray(PIL.open(path))
im_out = im[None].astype(dtype=int, copy=False)
作为输出数组形状。为此,要获得(1,H,W)
的数组形状,请执行:(H,W,1)
而不是im[...,None]
。
更简单的方法是 -
im[None]
如果输入已经在im_out = np.asarray(img, dtype=int)[None]
dtype中,并且我们想要一个相同dtype的输出数组,请使用uint8
,这应该非常快。