Сохранить проблему изображения после преобразования 2d в 3d массив - PullRequest
1 голос
/ 20 февраля 2020

Я преобразовал 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”)

1 Ответ

0 голосов
/ 21 февраля 2020

Изображение не является цветным изображением, поскольку для каждого пикселя красный, зеленый и синий цветовые каналы имеют одинаковое значение.

При использовании 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

...