Python Pygame Blit.Получение изображения для отображения - PullRequest
2 голосов
/ 11 декабря 2011

Я пытаюсь заставить мою веб-камеру показывать видео через Pygame. Вот код:

# import the relevant libraries
import time
import pygame
import pygame.camera
from pygame.locals import *
# this is where one sets how long the script
# sleeps for, between frames.sleeptime__in_seconds = 0.05
# initialise the display window
pygame.init()
pygame.camera.init()

screen = pygame.display.set_mode((640, 480), 0, 32)

# set up a camera object
cam = pygame.camera.Camera(0)
# start the camera
cam.start()

while 1:

    # sleep between every frame
    time.sleep( 10 )
    # fetch the camera image
    image = cam.get_image()
    # blank out the screen
    screen.fill((0,0,2))
    # copy the camera image to the screen
    screen.blit( image, ( 0, 0 ) )
    # update the screen to show the latest screen image
    pygame.display.update()

Когда я пытаюсь это сделать, я получаю сообщение об ошибке из screen.blit (image, (0, 0)) part

Traceback (most recent call last):
  File "C:\Python32\src\webcam.py", line 28, in <module>
    screen.blit( image, ( 0, 0 ) )
TypeError: argument 1 must be pygame.Surface, not None

Полагаю, это потому, что я не конвертировал изображение во все, что работает с pygame, но я не знаю.

Любая помощь будет оценена. Спасибо.

-Alex

ОК, вот новый код: Этот работает, потому что он сохраняет изображение в текущей папке. выяснил, почему последний работает. экран по-прежнему черный, хотя = \

# import the relevant libraries
import time
import pygame
import pygame.camera
from pygame.locals import *
# this is where one sets how long the script
# sleeps for, between frames.sleeptime__in_seconds = 0.05
# initialise the display window
pygame.init()
pygame.camera.init()
# set up a camera object
size = (640,480)
screen = pygame.display.set_mode(size,0)


surface = pygame.surface.Surface(size,0,screen)

cam = pygame.camera.Camera(0,size)
# start the camera
cam.start()

while 1:

    # sleep between every frame
    time.sleep( 10 )
    # fetch the camera image
    pic = cam.get_image(surface)
    # blank out the screen
    #screen.fill((0,0,0))
    # copy the camera image to the screen
    screen.blit(pic,(0,0))
    # update the screen to show the latest screen image
    p=("outimage.jpg")

    pygame.image.save(surface,p)
    pygame.display.update()

1 Ответ

1 голос
/ 11 декабря 2011

Попробуйте создать такую ​​камеру.

cam = pygame.camera.Camera(camlist[0],(640,480))

Вот как это делается на этой странице документации Pygame.


Глядя на страницу API для pygame.camera, я обнаружил две вещи, которые могут помочь. Во-первых,

В настоящее время Pygame поддерживает только камеры Linux и v4l2.

ЭКСПЕРИМЕНТАЛЬНО !: Этот API может измениться или исчезнуть в более поздней версии Pygame релизы. Если вы используете это, ваш код, скорее всего, сломается с следующий релиз Pygame.

Имейте это в виду, задаваясь вопросом, почему это неожиданно не получается.

На более удачной ноте ... вы можете попробовать позвонить camera.get_raw() и распечатать результат. Это должна быть строка с необработанными данными изображения. Если вы получили пустую строку, None или какой-то не имеющий смысла текст: поделитесь этим с нами здесь. Он скажет, получаете ли вы что-нибудь от камеры.

Получает изображение с камеры в виде строки в собственном пиксельном формате камеры. Полезно для интеграции с другими библиотеками.

...