cv2.VideoCapture.read()在time.sleep()之后变旧

vtn*_*tni 4 python opencv

我尝试使用Python opencv和两个摄像头捕获(立体声)图像,因此应每5秒保存一次图像。但是这里的问题是保存了旧框架。

缩小的代码如下:

    cap = cv2.VideoCapture(0)

    for i in range(20):
        time.sleep(5)
        print "Taking image %d:" % i
        ret, frame = cap.read()
        cv2.imwrite("image %d" % i, frame)
        print "  image done." if ret else "  Error while taking image..."
    cap.release()
    cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

为了检查这一点,我在每次拍摄图像后都更改了相机的位置。但是尽管如此,还是保存了旧位置的图像(实际上是不一样的,但我假设最后保存的图像之后有几帧)。在5张(或更多)图像之后,最终在图像中捕获的位置也确实发生了变化。

那么,有什么问题time.sleep吗?我想我没有得到实际的帧,而是缓冲的帧。如果是这种情况,我该如何解决它并捕获实际帧?

小智 5

VideoCapture正在缓冲。如果您始终需要实际的框架,请执行以下操作:

while True:
    cap = cv2.VideoCapture(0)
    ret, frame = cap.read()
    cap.release()
    cv2.imshow(" ", frame)
    if cv2.waitKey(2000) != -1:
        break
Run Code Online (Sandbox Code Playgroud)