我正在使用相机,使用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
答案 0 :(得分:0)
出于原因,你没有得到预期的图像。此错误表示“img”对象为“无” - 也就是说,您对get_image
的调用未获得预期结果。
据我所知,你正在进行所有需要的调用以获取相机并获取图像 - 所以,你最好在那里做一些调试,并检查内省你的网络摄像头对象是什么,以及尝试以交互方式调用.get_image()
方法,观察它返回的内容。
为此,您可以直接在Python控制台中粘贴相关的行,或者 把`import pdb; pdb.set_trace()“开头的语句,然后继续使用Python Debugger。(对于这么短的片段,你可能最好直接在解释器中粘贴/输入)。
如果您的设置一切正常,可能是相机在start
和get_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年但我希望它可以帮助其他人。