0

我熟悉编程,但不熟悉 python 或 linux。我在树莓派上用 python 编程,试图创建一个安全摄像头。这是我测试当前问题的代码:

#!/usr/bin/python
import pygame, sys
from pygame.locals import *
from datetime import datetime
import pygame.camera
import time

pygame.init()
pygame.camera.init()

width = 640
height = 480

pic_root = "/root/cam/"

cam = pygame.camera.Camera("/dev/video0",(width,height),"RGB")

cam.start()

while True:
    raw_input("press enter")
    image = cam.get_image()
    filename = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") +'.jpg'
    filepath = pic_root+filename
    pygame.image.save(image, filepath)

所以当我按下回车键时,会从网络摄像头拍摄一张图像并保存。但图像总是在后面两个图像。无论保存图像的间隔时间有多长,前两个图像总是很暗,好像网络摄像头刚刚启动一样,然后剩下的两个图像总是迟到。

因此,如果我拍了 5 张图像,一张用一根手指向上,然后是用两根手指,以此类推,我最终会得到两张深色图像,然后是前三张图像。1,2 和 3 个手指。就好像图像被存储在某个地方,然后当我尝试保存实时图像时,它会拉出一个旧图像。

我在这里错过了什么吗?有什么问题?

4

2 回答 2

0

首先,我不熟悉 Pygame(但我使用 OpenCV 进行了很多快照捕获——这是我的一个项目:http: //vmlaker.github.io/wabbit。)

我更改了您的代码,以便在每次迭代时,您 1) 开始,2) 拍摄快照,以及 3) 停止相机。这工作得更好一些,因为它只有一个图像后面(而不是两个。)旧图像如何从上一次运行中残留下来仍然很奇怪......我还没有弄清楚如何冲洗相机。请注意,我也更改了pic_root,而不是无限循环,我只使用 3 次迭代:

from datetime import datetime
import pygame
import pygame.camera

pygame.init()
pygame.camera.init()

width = 640
height = 480

pic_root = './'

cam = pygame.camera.Camera("/dev/video0",(width,height),"RGB")

#cam.start()

for ii in range(3):
    raw_input("press enter")
    cam.start()
    image = cam.get_image()
    cam.stop()
    filename = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") +'.jpg'
    filepath = pic_root+filename
    pygame.image.save(image, filepath)
于 2013-08-17T16:41:56.273 回答
0

OP 的评论有所帮助,但实际上我必须在保存之前使用 get_image() 拉图片三次。

我还有一个唤醒功能,我会在较长的待机时间后调用它来唤醒相机。我的有很长一段时间后变黑的行为。我想,所有这些奇怪的东西都与缓冲区有关。但是多次调用对我有用。

于 2021-12-24T16:21:01.467 回答