为什么开始时time.sleep()失败并显示cv2.VideoCapture()?

时间:2018-06-26 16:45:48

标签: python opencv cv2

我试图使用cv2.VideoCapture()每3秒从相机获取一帧,所以我使用time.sleep()暂停执行,代码在这里:

import cv2
import time
cnt = 0 
cap = cv2.VideoCapture(0)
while (True):
    time.sleep(3)
    ret, frame = cap.read()
    cv2.imwrite('{}.png'.format(cnt),frame)
    cnt+=1
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

我在相机的前面放置了一个秒表,每3秒保存一帧,但是我发现在第一帧之后还有另外四帧被错误地保存,因此保存的图像时间为:1.0、1.1、1.1, 1.2、1.3、2、3、4、5、6等。那么到底是怎么回事?

1 个答案:

答案 0 :(得分:2)

问题似乎是当您调用read()时,opencv正在缓冲多个帧。从其他几个问题(Get most recent frame from webcamhttp://answers.opencv.org/question/29957/highguivideocapture-buffer-introducing-lag/)来看,好像有5张图片已被缓冲,因此您可能需要grab()剩下的4张图片才能继续。