TypeError:必须是pygame.Surface,而不是None
我正在使用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
我刚从Python 3.5降级到2.7,遇到了和你一样的问题。经过快速搜索,我解决了这个问题:get_image只需要一个参数,就是pygame的表面!所以,你可以这样做:
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)
我想你可能不再需要这个了,因为已经过去一年多了,但我希望这能帮助到其他人。
0
可能是某种原因,你没有得到预期的图像。这个错误意味着“img”对象是“None”,也就是说你调用的 get_image
没有得到想要的结果。
根据我所了解,你已经做了所有必要的操作来启动摄像头并抓取图像,所以你最好在这里进行一些调试,检查一下你的摄像头对象是什么,并尝试交互式地调用 .get_image()
方法,观察它返回了什么。
要做到这一点,你可以直接在 Python 控制台中粘贴相关的代码行,或者在开头加上 `import pdb; pdb.set_trace()` 语句,然后使用 Python 调试器 逐步执行。(对于这么短的代码片段,直接在解释器中粘贴或输入可能更好)。
如果你的设置一切正常,可能是摄像头在 start
和 get_image
调用之间需要一些“热身”时间。如果在交互模式下你能得到图像,试着在 start
调用后添加一个任意的延迟(比如200毫秒),可以使用 pygame.time.delay
来实现。
另外,据我所知,pygame 不能将图像编码为“jpg”格式,你必须将其保存为“bmp”格式,或者使用其他库来处理 pygame.Surface 对象并保存为其他图像格式。