2 решения:
Номер 1: (Вы просто хотите альфа-канал) Просто конвертируйте его в RGBA (вы получите 4-й канал)
printscreen = Image.open('some_image.jpg').convert('RGBA')
Номер 2: Более гибкий и общий подход к расширяющемуся размеру
1) Запросить размер 2D изображения
2) создать заполненное 2D изображение в градациях серогос нулями
3) объединить исходное 3D-изображение с изображением в градациях серого
4) в результате получается 4-канальное изображение, для одного канала установлено значение 0
import numpy as np
from PIL import Image
printscreen = Image.open('some_image.jpg').convert('RGB')
temp = np.asarray(printscreen)
shp = temp.shape
printscreen = np.concatenate((temp,np.zeros(shape=[shp[0],shp[1],1])),axis=2)
printscreen = Image.fromarray(printscreen.astype(np.uint8))
>>> printscreen.shape # before transformed with Image.fromarray
(397, 397, 4)
Редактировать - Общее отношение к наложению матриц на себя:
Если вы хотите, чтобы на изображениях было больше изображений:
(то же самоекак решение 2, но более выразительное)
img1 = np.zeros(shape = [10,10,3])
img2 = np.zeros(shape = [10,10,3])
img_1_2 = np.concatenate((img1,img2),axis = 2)
>>> img_1_2.shape
(10, 10, 6)
Редактировать 2:
Просто для вашей информации причина, по которой вы получаете ошибку, заключается в том, что выпытаются преобразовать массив NumPy в PIL Image в не-формате изображения.Форма является проблемой - у вас было что-то вроде (х, у, 3,1).Функция np.expand_dims делает именно то, что говорит - она добавляет новое измерение, это означает, что вы фактически делаете из изображения фильм / видео.Изображение в градациях серого 2-мерное, RGB или RGBA - 3-мерное, а фильм - 4-мерное, где 4-е измерение - это время (или, лучше сказать, последовательности изображений).Преобразование между RGB в RGBA расширяет не измерение, а «объем», или, если сказать более четко, расширение размера цвета с длины 3 до длины 4
РЕДАКТИРОВАТЬ 3: Вы действительно хотите расширить до 4-гоизмерение, где дополнительное измерение будет заполнено новыми изображениями
Это решение не считается с PIL, поскольку PIL не имеет ничего общего с этим
import numpy as np
class ImageContainer(object):
def __init__(self,first_image):
self.container = np.uint8(np.expand_dims(np.array(first_image), axis=0))
def add_image(self,image):
print(image.shape)
temp = np.uint8(np.expand_dims(np.array(image), axis=0))
print(temp.shape)
self.container = np.concatenate((self.container,temp),axis = 0)
print(self.container.shape)
def save_all(self,name):
np.save(name,self.container)
img1 = np.zeros(shape = [10,10,3]) # RGB
img2 = np.zeros(shape = [10,10,3]) # RGB
cont = ImageContainer(img1)
cont.add_image(img2)
>>
(1, 10, 10, 3) # 1 image
(2, 10, 10, 3) # 2 images