Преобразование 3-мерного массива Numpy в 4-мерный массив Numpy

#python #numpy

#python #numpy

Вопрос:

Я хочу создать простую программу, которая выводит видео в виде веб-камеры, но камера хочет использовать массив RGBA Numpy, но у меня есть только RGB из видео. Как я могу преобразовать 3-мерный массив в 4-мерный?

Ответ №1:

На самом деле вы не преобразуете 3-мерный массив в 4-мерный массив. Вы меняете размер одного из измерений с трех на четыре.

Допустим, у вас есть изображение размером NxMx3. Затем вам нужно:

 temp = np.zeros((N, M, 4))
temp[:,:,0:3] = image
temp[:,:,3] = whatever default alpha you choose to use.
 

Обобщайте по своему усмотрению.

Комментарии:

1. Я пробовал, но это выдает мне эту ошибку: ValueError: could not broadcast input array from shape (1080,1920,3) into shape (1080,1920,2)

2. Упс. Извините. Опечатка. Исправлено.

Ответ №2:

Предполагая, что ваш существующий массив имеет форму (xsize, ysize, 3) , и вы хотите создать alpha как 4-ю запись, заполненную 1 , вы должны быть в состоянии сделать что-то вроде

 alpha = np.ones((*rgb.shape[0:2], 1))
rgba = np.concatenate((rgb, alpha), axis=2)
 

Если вам нужно другое равномерное альфа-значение, которое вы могли бы использовать np.full с этим значением вместо np.ones , но обычно при преобразовании RGB в RGBA требуется полная непрозрачность.

Ответ №3:

Вы можете np.dstack использовать свой оригинал im с np.ones(im.shape[:2])

 new_im = np.dstack((im, np.ones(im.shape[:2])))
 

обновление: это эквивалентно решению @hobbs np.concatenate(..., axis=2)

Ответ №4:

Может быть, попробуйте что-то вроде этого: (импортировать numpy как np)

 
    arr  # shape (n_bands, y_pixels, x_pixels)
    swapped = np.moveaxis(arr, 0, 2)  # shape (y_pixels, x_pixels, n_bands)
    arr4d = np.expand_dims(swapped, 0)  # shape (1, y_pixels, x_pixels, n_bands)