TypeError:必须是pygame.Surface,而不是None

时间:2014-09-07 14:04:45

标签: python python-2.7 camera pygame pygame-surface

我正在使用相机,使用pygame,我写了这段代码:

import pygame.camera
import pygame.image
pygame.camera.init()
list_webCam = pygame.camera.list_cameras()

webcam = pygame.camera.Camera(list_webCam[0],(640,480))
webcam.start()
img = webcam.get_image()
pygame.image.save(img, "photo.jpg")
pygame.camera.quit()

但是它返回了我的错误:

Traceback (most recent call last):
  File "C:\Users\Fulvio\Desktop\pygame.Camera.py", line 11, in <module>
    pygame.image.save(img, "photo.jpg")
TypeError: must be pygame.Surface, not None

2 个答案:

答案 0 :(得分:0)

出于原因,你没有得到预期的图像。此错误表示“img”对象为“无” - 也就是说,您对get_image的调用未获得预期结果。

据我所知,你正在进行所有需要的调用以获取相机并获取图像 - 所以,你最好在那里做一些调试,并检查内省你的网络摄像头对象是什么,以及尝试以交互方式调用.get_image()方法,观察它返回的内容。

为此,您可以直接在Python控制台中粘贴相关的行,或者 把`import pdb; pdb.set_trace()“开头的语句,然后继续使用Python Debugger。(对于这么短的片段,你可能最好直接在解释器中粘贴/输入)。

如果您的设置一切正常,可能是相机在startget_image来电之间可能需要一些“预热”时间。如果使用交互模式获取图像,请尝试在start调用后添加任意延迟(例如200毫秒)(使用pygame.time.delay

另外,据我所知,pygame无法将图像编码为“jpg” - 你必须将其保存为“bmp” - 或使用其他一些库来处理pygame.Surface对象并保存为其他图像格式

答案 1 :(得分:0)

我刚刚从python 3.5传递到2.7,我遇到了同样的问题。 快速搜索后我解决了它: get_image想要1个参数:pygame suface! 所以,你可以这样做:

import pygame
import pygame.camera
from pygame.locals import *
pygame.camera.init()
cam = pygame.camera.Camera(0,(640,480),"RGB")
cam.start()
img = pygame.Surface((640,480))
cam.get_image(img)
pygame.image.save(img, "img.jpg")
cam.stop()
  

img = pygame.Surface((640,480))

     

cam.get_image(IMG)

我想你不再需要这个了,因为它已经超过1年但我希望它可以帮助其他人。