Как объединить массивы NumPy
Имеется изображение разрешением (220, 220), т.е. массив (220, 220, 3) из трёх слоёв RGB. Как к этому массиву добавить ещё четыре слоя (предположим нулевых), не нарушив порядка в изображении. Как я понимаю должен получиться массив с размерами (220, 220, 7) или я ошибаюсь
import numpy as np
a = np.arange(220 * 220 * 3).reshape(220 * 220, 3)
a = np.array(np.vsplit(a, 220))
b = np.zeros(220 * 220 * 4).reshape(220 * 220, 4)
b = np.array(np.vsplit(b, 220))
c = np.vstack((a, b))
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
В numpy традиционно картинки храняться с формате высота * ширина * глубина. Глубина отвечает за количество слоёв в картинке.
Создаём изображение из трёх слоёв. Размер изображения 4 на 5:
@>>> a = np.arange(4 * 5 * 3).reshape(4, 5, 3)
@>>> a[:, :, 0]
array([[ 0, 3, 6, 9, 12],
[15, 18, 21, 24, 27],
[30, 33, 36, 39, 42],
[45, 48, 51, 54, 57]])
@>>> a[:, :, 1]
array([[ 1, 4, 7, 10, 13],
[16, 19, 22, 25, 28],
[31, 34, 37, 40, 43],
[46, 49, 52, 55, 58]])
@>>> a[:, :, 2]
array([[ 2, 5, 8, 11, 14],
[17, 20, 23, 26, 29],
[32, 35, 38, 41, 44],
[47, 50, 53, 56, 59]])
Создаём два дополнительных слоя:
@>>> b = np.zeros((4, 5, 2), dtype=int)
@>>> b[:, :, 0]
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
@>>> b[:, :, 1]
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
Склеиваем по последней оси:
@>>> c = np.concatenate((a, b), axis=2)
@>>> c[:, :, 2]
array([[ 2, 5, 8, 11, 14],
[17, 20, 23, 26, 29],
[32, 35, 38, 41, 44],
[47, 50, 53, 56, 59]])
@>>> c[:, :, 3]
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])