我已经将2d array(arr2d)转换为3d array(arr3d)并使用以下代码保存为图像。 arr2d是float64类型。为什么保存图像不是彩色图像?
arr3d[:, :, 0] = arr3d[:, :, 1] = arr3d[:, :, 2] = arr2d
arr3d=arr3d*255
im=Image.fromarray(np.maximum(np.minimum(arr3d, 255), 0).astype(np.uint8))
im.save(“sample.png”)
最佳答案
该图像不是彩色图像,因为对于每个像素,红色,绿色和蓝色通道具有相同的值。
使用im=Image.fromarray(arr3d)
时:arr3d[:, :, 0]
是红色像素平面。arr3d[:, :, 1]
是绿色像素平面。arr3d[:, :, 2]
是蓝色像素平面。
使用arr3d[:, :, 0] = arr3d[:, :, 1] = arr3d[:, :, 2] = arr2d
时,请确保每个像素都为red = green = blue。
R = G = B的像素颜色为灰色。
我创建了以下代码来重现该问题:
import numpy as np
from PIL import Image
arr2d = np.random.rand(50, 50) # Create 50x50 2D array with random values in range [0, 1]
arr3d = np.zeros((50, 50, 3))
arr3d[:, :, 0] = arr3d[:, :, 1] = arr3d[:, :, 2] = arr2d
arr3d = arr3d*255
im = Image.fromarray(np.maximum(np.minimum(arr3d, 255), 0).astype(np.uint8))
im.save("sample.png")
结果-所有像素均为灰色:
获得某些颜色结果的示例:
arr3d[:, :, 0] = np.random.rand(50, 50);arr3d[:, :, 1] = np.random.rand(50, 50);arr3d[:, :, 2] = np.random.rand(50, 50)
关于python - 将2d转换为3d阵列后保存图像问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60310531/