首页 文章

将OpenCV2 Videowrite输入发送到缓冲区而不是文件

提问于
浏览
1

我想将openCV2录像机输出写入内存中的缓冲区而不是硬盘上的文件 . 接下来我可以写出一个文件或不写(这样可以保存基于闪存的对象不被过度使用) . 我已经尝试过pyfilesystem,我尝试过像IO和StringIO这样的东西,但VideoRecorder不接受这些说它正在寻找一个字符串或Unicode类型,而是找到了一个(_IOTextWrapper,IOString等......)类型 .

1 回答

  • 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” . 它甚至可以更智能地编写脚本以节省一些空间,或者作为实际缓冲区工作,如果这正是您所需要的 .

相关问题