正在将OpenCV2 Videowrite输入发送到缓冲区而不是fi

2024-06-02 07:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把openCV2录像机的输出写入内存中的缓冲区,而不是硬盘上的文件。接下来,我可以写或不写到一个文件(这样可以避免过度使用基于flash的对象)。我尝试过pyfilesystem,也尝试过IO和StringIO之类的东西,但VideoRecorder不接受这样的说法:它在寻找字符串或Unicode类型,而是找到了(\IOTextWrapper、IOString等…)类型。在


Tags: 文件对象内存字符串io类型flash缓冲区
1条回答
网友
1楼 · 发布于 2024-06-02 07:38:21

我现在明白你的意思了,不过,我想这会在某种程度上破坏了录影机的目的。它的工作是把视频写到磁盘上。但是,我同意,如果有一个视频类,我们可以在cv2中操作它。在

同时,对我们来说,幸运的是,视频只不过是一系列的帧序列,而这些帧序列只是numpy数组。我们可以用它们做很多事情,所以我建议:

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

当然,这一切都可以通过创建你自己的类视频,然后实例化并在你的代码中作为一个对象来处理。视频也可以有一个方法“writeToFile”。它甚至可以编写得更聪明一些,以节省一些空间,或者作为一个实际的缓冲区来工作,如果这正是您所需要的。在

相关问题 更多 >