python pygame blit。获取要显示的图像
Posted
技术标签:
【中文标题】python pygame blit。获取要显示的图像【英文标题】:python pygame blit. Getting an image to display 【发布时间】:2011-12-11 02:21:59 【问题描述】:我正在尝试让我的网络摄像头通过 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)) 部分得到一个错误
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 的图像,但我不知道。
任何帮助将不胜感激。谢谢。
-亚历克斯
好的,这是新代码: 这个有效,因为它将图片保存到当前文件夹。弄清楚为什么最后一个有效。虽然屏幕仍然是黑色的=\
# 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()
【问题讨论】:
cam.get_image()
正在返回 None
。
该错误意味着图像为无,而不是格式错误的有效图像。显然 cam.get_image() 由于某种原因失败了。
【参考方案1】:
尝试像这样创建一个相机。
cam = pygame.camera.Camera(camlist[0],(640,480))
这就是在 pygame 文档的this page 上完成的。
查看API page 的pygame.camera
,我发现了两件事可能会有所帮助。首先,
Pygame 目前仅支持 Linux 和 v4l2 相机。
实验性的!:这个 api 可能会在以后的 pygame 中改变或消失 发布。如果您使用它,您的代码很可能会与 下一个 pygame 版本。
在想知道为什么这出人意料地失败时请记住这一点。
在更乐观的情况下...您可以尝试致电camera.get_raw()
并打印结果。它应该是带有原始图像数据的字符串。如果您收到空字符串、None
或一些无意义的文本:请在此处与我们分享。它会告诉你是否从相机中得到任何东西。
从相机获取图像,作为相机原生像素格式的字符串。对于与其他库的集成很有用。
【讨论】:
您可能需要调整图片分辨率,具体取决于您的相机。 它找不到我的相机。这就是为什么我以另一种方式做的,那部分工作正常。只是必须将图像放到屏幕上的部分不起作用 好吧,不管怎样,get_image
正在默默地失败。所以在那之前的一些事情是行不通的。
好的,那么我将尝试不同的方式。我找到了一个获取图像并保存它的代码,它可以工作。所以我要尝试合并它们。 brb以上是关于python pygame blit。获取要显示的图像的主要内容,如果未能解决你的问题,请参考以下文章
Pygame错误:self.spritedict [spr] = surface_blit(spr.image,spr.rect)