对于我的研究,我正在研究openCV的可能性,现在我尝试使cv2.videoCapture(0)
具有图像读取功能,将其存储在缓冲区或类似的东西中15秒钟,然后使用{{ 1}}从帧缓冲区。
我不知道如何缓冲我的视频提要,因为上下文,我希望能够延迟网络摄像头来创建用于杂耍训练的视频反馈系统。
做个小技巧,然后花几秒钟的时间到达屏幕,并反馈我刚刚做过的事情。
这是我目前捕获网络摄像头的方式,但这是非常基本的:
cv2.imshow()
我们将不胜感激。
答案 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
感谢您的帮助,我的摘要如何帮助您!