将二维阵列转换为三维阵列后保存图像问题

2024-06-02 10:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经将2d数组(arr2d)转换为3d数组(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”)

Tags: 代码图像image类型np数组彩色图像float64
1条回答
网友
1楼 · 发布于 2024-06-02 10:24:14

该图像不是彩色图像,因为对于每个像素,红色、绿色和蓝色通道具有相同的值

使用im=Image.fromarray(arr3d)时:

  • arr3d[:, :, 0]是红色像素平面
  • arr3d[:, :, 1]是绿色像素平面
  • arr3d[:, :, 2]是蓝色像素平面

使用arr3d[:, :, 0] = arr3d[:, :, 1] = arr3d[:, :, 2] = arr2d时,确保每个像素的红=绿=蓝

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")

结果-所有像素均为灰色:
enter image description here

使用某些颜色获得结果的示例:

arr3d[:, :, 0] = np.random.rand(50, 50);arr3d[:, :, 1] = np.random.rand(50, 50);arr3d[:, :, 2] = np.random.rand(50, 50)

enter image description here

相关问题 更多 >