Преобразование изображения из pygame в изображение PIL

мы используем Raspberry Pi + Python 3.4 + PyGame для захвата изображения с определенной веб-камеры USB. Мы используем этот простой код для захвата (он работает нормально):

pygame.camera.init()
cam = pygame.camera.Camera(pygame.camera.list_cameras()[0],(1280,720))
cam.start()
time.sleep(1)
webcamImage = cam.get_image()

Проблема возникает здесь: мы должны преобразовать это webcamImage в изображение PIL. Мы следуем по этой ссылке, но, к сожалению, функция Image.fromstring() больше не существует. Итак, мы не можем этого сделать:

pil_string_image = pygame.image.tostring(webcamImage, "RGBA",False)
pil_image = Image.fromstring("RGBA",(1280,720),pil_string_image)

PIL сообщает, что Image.fromstring() устарела, и предлагает использовать функцию Image.frombytes(). Очевидно, мы не нашли эквивалентную функцию pygame.image, которая преобразует webcamImage в массив байтов. Итак, мы застряли здесь: не могли бы вы нам помочь, пожалуйста? Спасибо :-)


person Caronte Consulting    schedule 17.02.2016    source источник
comment
Каков фактический тип результата pygame.image.tostring()? Другими словами, что производит type(pil_string_image).__name__? Если bytes, то документация Pygame устарела. Если str, то мне понадобится дополнительная помощь, чтобы различить кодировку, которую применяет Pygame.   -  person Damian Yerrick    schedule 17.02.2016
comment
Привет @DamianYerrick, прежде всего: спасибо за ваш нежный ответ. Мы следуем вашему предложению, поэтому мы делаем это: print(type(pil_string_image).__name__) и результат bytes. Итак, что вы предлагаете делать?   -  person Caronte Consulting    schedule 17.02.2016
comment
Хорошо, мы отвечаем сами себе здесь (:-D)   -  person Caronte Consulting    schedule 17.02.2016


Ответы (1)


Согласно комментарию Дамиана Йеррика, в Python 3 результатом pygame.image.tostring() является bytes, несмотря на название метода. Таким образом, мы можем выйти из этой ситуации с помощью этого простого кода:

pygame.camera.init()
cam = pygame.camera.Camera(pygame.camera.list_cameras()[0],(1280,720))
cam.start()
time.sleep(1)
webcamImage = cam.get_image()
pil_string_image = pygame.image.tostring(webcamImage,"RGBA",False)
im = Image.frombytes("RGBA",(1280,720),pil_string_image)
person Caronte Consulting    schedule 17.02.2016
comment
что такое img? Возможно, это должно быть pil_string_image = pygame.image.tostring(webcamImage,"RGBA",False)? - person KansaiRobot; 01.02.2017
comment
наш img — это то, что вы называете webcamImage. Спасибо за ваш ответ, но мы решили 1 год назад наш вопрос. - person Caronte Consulting; 02.02.2017
comment
Это был отличный вопрос и ответ. Я проголосовал за обоих. Кстати, вы знаете, как показать эти изображения PIL (в малине)? - person KansaiRobot; 03.02.2017
comment
Здравствуйте, нам нужно было получить изображение и сохранить его в файл. Вы можете попробовать эти строки кода (предупреждение: мы не пробуем этот код): from PIL import Image | img = Image.open('test.png') | img.show () - person Caronte Consulting; 07.02.2017