Изображение не является цветным изображением, поскольку для каждого пикселя красный, зеленый и синий цветовые каналы имеют одинаковое значение.
При использовании 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")
Результат - все пиксели серого цвета:
Пример для получения результата с несколькими цветами:
arr3d[:, :, 0] = np.random.rand(50, 50);arr3d[:, :, 1] = np.random.rand(50, 50);arr3d[:, :, 2] = np.random.rand(50, 50)