#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)