我想将openCV2录像机输出写入内存中的缓冲区而不是硬盘上的文件。接下来我可以写出一个文件或不写(这样可以保存基于闪存的对象不被过度使用)。我已经尝试过pyfilesystem,我尝试过像IO和StringIO这样的东西,但VideoRecorder不接受这些说它正在寻找一个字符串或Unicode类型,而是找到了一个(_IOTextWrapper,IOString等......)类型。
答案 0 :(得分:1)
我现在得到你的意思,但是我认为这会以某种方式打破VideoWriter的目的。它的工作是写磁盘上的视频。但是,我同意,拥有一个可以在cv2中操作的Video类会更好。
与此同时,对我们来说幸运的是,视频只是帧的序列,而不是阵容。我们可以做很多事情,所以这里是我提出的一般想法:
import numpy as np
import cv2
def save_to_vid(video):
path = ".../output.avi"
height , width , layers = video[0].shape
out = cv2.VideoWriter(path, cv2.cv.FOURCC("X", "V", "I", "D"),
20.0, (width, height))
for frame in frames:
out.write(frame)
out.release()
##CAPTURING SOME TEST FRAMES
cap = cv2.VideoCapture(0)
frames = list() #THIS IS YOUR VIDEO
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,0)
frames.append(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
#SOMETIMES LATER IN THE RPOGRAM
doYouWantToSave = True
if doYouWantToSave:
save_to_vid(frames)
else:
del frames
当然这一切都可以更聪明地完成我想通过创建自己的类Video然后实例化它并将其作为代码中的对象处理。视频也可以有一个方法“writeToFile”。它甚至可以更智能地编写脚本来节省一些空间,或者作为一个实际的缓冲区,如果这正是你需要的。