代码之家  ›  专栏  ›  技术社区  ›  Ahmed Salah

时间为什么会这样。sleep()因cv2而失效。VideoCapture()刚开始?

  •  1
  • Ahmed Salah  · 技术社区  · 8 年前

    我正在尝试每3秒钟用一次相机获取一帧 cv2.VideoCapture() 所以我用 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秒保存一帧,但我发现在第一帧之后,还有其他4帧被错误保存,所以保存的图像时间是:1.0,1.1,1.1,1.2,1.3,2,3,4,5,6,等等。那么这到底是怎么发生的呢?

    1 回复  |  直到 8 年前
        1
  •  2
  •   lxop    8 年前

    问题似乎在于,调用opencv时,opencv正在缓冲多个帧 read() .来自其他几个问题( Get most recent frame from webcam , http://answers.opencv.org/question/29957/highguivideocapture-buffer-introducing-lag/ )看起来有5个图像被缓冲了,所以你可能需要 grab() 在继续之前,额外的4个。