Как поместить область изображения Pyglet в изображение PIL?

Мое приложение считывает кадры из видео (используя pyglet), извлекает «полосу» (т. е. область — полная ширина от 1 до 6 строк видео), затем вставляет каждую полосу (добавляет ее) в изображение, которое впоследствии можно записать в файл *. png файл.

Проблема в том, что изображения Pyglet GL хранятся в графической памяти, поэтому их размер очень ограничен. Мой текущий неуклюжий обходной путь - это создание будущего изображения png в виде небольших плиток (т.е. в пределах ограничения размера pyglet GL), когда плитка заполнена, запишите ее в файл * png, прочитайте это обратно как файл изображения PIL , затем вставьте/добавьте изображение плитки в окончательный файл PIL Image * png.

Я считаю, что должна быть возможность преобразовать полосу pyglet-GL в формат, удобный для изображений PIL, и вставить/добавить его прямо в окончательное изображение PIL, таким образом, не нуждаясь в бизнесе плитки, который значительно усложняет вещи и влияет на производительность. .

Но я не могу найти, как получить данные полосы в форме, которую я могу вставить в изображение PIL. Я видел много запросов, конвертируемых в другую сторону, но я никогда не бегал за толпой.


person Community    schedule 03.05.2009    source источник


Ответы (1)


Я знаю, что отвечать на собственный вопрос дурной тон, но я придумал ответ, который может быть полезен другим, так что вот...

nextframe = source.get_next_video_frame() # получить первый видеокадр
while nextframe != None:# возвращает None в EOF

#
### extract strip data, conver to PIL Image-friendly form, paste itn into travo Image
#
strip = nextframe.get_region(0, (vid_frame_h//2)-(strip_h//2), strip_w, strip_h) # Extract strip from this frame
strip_image_data = strip.get_image_data() 
strip_data = strip_image_data.get_data(strip_image_data.format, strip_image_data.pitch)
strip_Image = Image.frombuffer("RGB", (strip_w, strip_h), strip_data)
travo_image.paste(strip_Image, (0, travo_filled_to, strip_w, travo_filled_to + strip_h)) # paste strip image into travo_image 
travo_filled_to = travo_filled_to + strip_h     # update travo_filled pointer
nextframe = source.get_next_video_frame()       # get next video frame (EOF returns None)    

конец "в то время как следующий кадр != Нет:"

person Community    schedule 04.05.2009