0

我正在使用相机,使用 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
4

2 回答 2

0

出于某种原因,您没有得到预期的图像。这个错误意味着“img”对象是“None”——也就是说,你的调用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 对象并保存为其他图像格式。

于 2014-09-07T14:21:16.297 回答
0

我刚刚从 python 3.5 转到 2.7,我遇到了同样的问题。经过快速搜索,我解决了它:get_image 需要 1 个参数: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)

我想你不再需要这个了,因为它已经过去了一年多,但我希望它可以帮助别人。

于 2015-10-19T17:32:49.777 回答