How to save a 3 channel numpy array as image

后端 未结 3 1645
借酒劲吻你
借酒劲吻你 2020-12-10 06:35

I have a numpy array with shape (3, 256, 256) which is a 3 channel (RGB) image of resoulution 256x256. I am trying to save this to disk with Image

3条回答
  •  一生所求
    2020-12-10 06:45

    The @Dietrich answer is valid, however in some cases it will flip the image. Since the transpose operator reverses the index, if the image is stored in RGB x rows x cols the transpose operator will yield cols x rows x RGB (which is the rotated image and not the desired result).

    >>> arr = np.random.uniform(size=(3,256,257))*255
    

    Note the 257 for visualization purposes.

    >>> arr.T.shape
    (257, 256, 3)
    
    >>> arr.transpose(1, 2, 0).shape
    (256, 257, 3)
    

    The last one is what you might want in some cases, since it reorders the image (rows x cols x RGB in the example) instead of fully transpose it.

    >>> arr = np.random.uniform(size=(3,256,256))*255
    >>> arr = np.ascontiguousarray(arr.transpose(1,2,0))
    >>> img = Image.fromarray(arr, 'RGB')
    >>> img.save('out.png')
    

    Probably the cast to contiguous array is not even needed, but is better to be sure that the image is contiguous before saving it.

提交回复
热议问题