1D массив в RGB изображение? - PullRequest
0 голосов
/ 30 января 2020

У меня есть 1D массив изображений, в котором хранится цветное изображение 32X32, сначала 1024 как красный, 1024 зеленый и 1024 синий. Изображение хранится в основном порядке строк, поэтому теперь первые 32 записи массива являются значениями красного канала первой строки изображения.

Пример выглядит как X [0]

(array([255., 252., 253., ..., 173., 231., 248.], dtype=float32)

Я попытался изменить массив на 3 части, но построенное изображение не похоже ни на что.

Код

a = X[0].reshape(3,-1).T.reshape(32,-1,3)
Image.fromarray(a, 'RGB')

Полученное изображение выглядит так

enter image description here

Возможно, набор данных - это просто случайные числа.

1 Ответ

4 голосов
/ 30 января 2020

Нам нужно переставить оси, и для того же мы можем использовать np.transpose -

H,W = 32,32 # image dimensions
img_0 = X[0].reshape(3,H,W).transpose(1,2,0)

Если у вас есть массив изображений, хранящихся в строках в массиве 2D, т.е. первая строка обозначает X[0], вторая строка X[1] и т. Д., Мы можем получить обратно все изображения, и это будет массив 4D, например:

img_all = X.reshape(-1,3,H,W).transpose(0,2,3,1)

Чтобы проверить вещи, давайте создадим минимальный настройка:

# This is what we want as final output
In [46]: a = np.arange(18).reshape(2,3,3)

    In [52]: a
    Out[52]: 
    array([[[ 0,  1,  2],
            [ 3,  4,  5],
            [ 6,  7,  8]],

           [[ 9, 10, 11],
            [12, 13, 14],
            [15, 16, 17]]])

In [47]: H,W = 2,3 # img dimensions

# This is what we have
In [63]: b = np.hstack([a[...,i].ravel() for i in range(3)])

In [64]: b
Out[64]: 
array([ 0,  3,  6,  9, 12, 15,  1,  4,  7, 10, 13, 16,  2,  5,  8, 11, 14,
       17])

# Check if the proposed soln gives us "a" back
In [51]: np.allclose(a, b.reshape(3,H,W).transpose(1,2,0))
Out[51]: True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...