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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…