Pygame的图像捕捉实际上如何运作?

时间:2018-05-27 08:35:31

标签: python python-2.7 pygame pygame-surface

我的目标是在一定时间内设置一个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

提前致谢!

1 个答案:

答案 0 :(得分:1)

捕获一张图像后,你不要停止相机。

https://www.pygame.org/docs/tut/CameraIntro.html

get_image()从缓冲区获取相机当前看到的图像 - 缓冲区不是“自start()以来的所有图片”,而只是当前查看的图像。

在3秒的“捕捉窗口”之后使用stop()来停止更多的图像。

如果您在演出后,可能需要向下滚动该页面并查看有关捕捉直播的部分 - 如果您执行相同操作(没有显示流)并且刚刚保存需要时,1个图像到磁盘应该得到合适的帧速率。

Api:get_image()