使用PIL将灰度图像转换为(1,H,W)numpy数组

时间:2017-12-01 07:05:15

标签: python numpy python-imaging-library

使用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)

请建议......

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,这应该非常快。