给视频捕获增加X延迟

时间:2019-10-28 12:02:35

标签: python opencv

对于我的研究,我正在研究openCV的可能性,现在我尝试使cv2.videoCapture(0)具有图像读取功能,将其存储在缓冲区或类似的东西中15秒钟,然后使用{{ 1}}从帧缓冲区。

我不知道如何缓冲我的视频提要,因为上下文,我希望能够延迟网络摄像头来创建用于杂耍训练的视频反馈系统。

做个小技巧,然后花几秒钟的时间到达屏幕,并反馈我刚刚做过的事情。

这是我目前捕获网络摄像头的方式,但这是非常基本的:

cv2.imshow()

我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为仅将视频录制到文件中会更方便(也更容易)。然后可以播放该文件。我从这些tutorials中收集了一些代码。
按“ r”,录音开始。完成后,按“ q”。然后按“ p”播放视频。要重试,只需再次按“ r”以覆盖先前的视频文件。另一个好处是,您可以根据需要保留视频。
您可以使用额外的功能(和输入检查-根本没有!)轻松地扩展此代码,但这可能足以满足您的需求。

import numpy as np
import cv2

def rec():
    # record a video
    cap = cv2.VideoCapture(0)
    # Define the codec and create VideoWriter object
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('output.avi',fourcc, 30.0, (640,480))

    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret==True:
            out.write(frame)
            cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

    # Release everything if job is finished
    cap.release()
    out.release()

def playback():
    # play a video
    cap = cv2.VideoCapture('output.avi')

    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            cv2.imshow('frame',frame)
        else:
            break
        if cv2.waitKey(30) & 0xFF == ord('q'):
            break

    cap.release()

# create empty window to process input
cv2.namedWindow('frame')
# main loop
while True:
    key = cv2.waitKey(10) 
    if key == ord('r'):
        rec()
    elif key == ord('p'):
        playback()
    elif key == ord('x'):
        # end main loop
        cv2.destroyAllWindows()

答案 1 :(得分:0)

这是我结束了网络摄像头feed的视频播放的摘录:(python) 它只是将帧存储在列表中,并在每个“ DELAY_SECONDS”中弹出。

import cv2
import time

cap = cv2.VideoCapture(0)
print(cap.get(3))
print(cap.get(4))

start_time = time.time()

frames = []

DELAY_SECONDS = 5

while True:

    ret, frame = cap.read()
    frames.append(frame)

    if time.time() - start_time > DELAY_SECONDS:
        cv2.imshow("frame", frames.pop(0))

    key = cv2.waitKey(1)
    if key == 27:
        break

感谢您的帮助,我的摘要如何帮助您!