我的目标是在一定时间内设置一个Raspberry Pi的网络摄像头(让我们说2分钟)。在此期间,我应该能够随时捕获静止图像并将该图像保存到文件夹中。我选择使用pygame。我的项目是关于一旦触发传感器就捕获图像,因此它需要非常敏感。
根据Pygame相机here的文档,它说:
open()
打开相机设备,尝试初始化它,然后开始 将图像记录到缓冲区。相机必须在任何之前启动 可以使用以下功能。
get_image()
将图像作为RGB曲面从缓冲区中拉出。它可以选择 重用现有Surface以节省时间。表面的位深度 是24位或与可选提供的Surface相同。
因此,对于我的情况,get_image()
似乎只是提取了start()
被调用后捕获的第一张图像。我的问题是,如何使用所有捕获的图像到达缓冲区或捕获实际如何工作?在我在pygame相机上调用start()
和stop()
之间,我无法找到捕获和保存静止图像的解决方案(在任何时间)。由于start()
函数会在几秒钟内启动,因此只需稍后调用start()
,get_image()
和stop()
即可。任何帮助或建议将不胜感激。
请参阅下面的我的python代码:
def activateCapturing:
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(320,180))
cam.start()
pngdata = None
imageAsbytes = []
activated = True
while activated:
if readSensor():
img = cam.get_image()
pygame.image.save(img, "/tmp/image.png")
activated = False
with open("/tmp/image.png", 'rb') as f:
pngdata = f.read()
imageAsbytes = bytearray(pngdata)
cam.stop()
return imageAsbytes
提前致谢!
答案 0 :(得分:1)
捕获一张图像后,你不要停止相机。
见https://www.pygame.org/docs/tut/CameraIntro.html。
get_image()
从缓冲区获取相机当前看到的图像 - 缓冲区不是“自start()以来的所有图片”,而只是当前查看的图像。
在3秒的“捕捉窗口”之后使用stop()
来停止更多的图像。
如果您在演出后,可能需要向下滚动该页面并查看有关捕捉直播的部分 - 如果您执行相同操作(没有显示流)并且刚刚保存需要时,1个图像到磁盘应该得到合适的帧速率。
Api:get_image()