【问题标题】:How to write video to memory in OpenCV如何在 OpenCV 中将视频写入内存
【发布时间】:2018-05-28 04:25:12
【问题描述】:

您可以将视频写入内存吗?我使用 Raspberry Pi,我不想继续写入和删除在 sd 卡上创建的 videowriter 对象(或者这样做可以吗?)。

如果不满足条件,我想每秒丢弃一次书面视频。我使用运动检测器记录类型,我想在检测到运动之前捕捉瞬间(在这种情况下为一秒),因为否则写入的视频会丢失部分发生的事情。我在python环境中使用opencv。

【问题讨论】:

    标签: python python-3.x opencv video video-capture


    【解决方案1】:

    视频文件通常或者甚至一般来说太大而无法放入您的主内存中,因此您不太可能只将整个视频保存在那里。

    还值得注意的是,您的操作系统本身可能决定在快速内存、较慢内存、磁盘等之间移动数据,因为它管理多个进程,但这在本次讨论中可能并不重要。

    这取决于您的用例,但典型的视频场景可能是:

    • 从摄像头或源流接收视频帧
    • 对视频帧进行一些处理 - 例如对其进行转码、检测对象、添加文本或图像等
    • 在某处存储或发送更新的帧
    • 回到第一步

    在这样的流程中,在处理帧时将帧保留在内存中显然是有优势的,但是一旦完成,通常就不再有优势了,因此可以将其移动到磁盘或将其发送到它的目的地。

    如果您的用例要求您处理帧组,就像某些编码算法所做的那样,那么将帧组保留在内存中直到您完成它们然后将它们写入磁盘可能是有意义的。

    我认为最适合您的答案取决于您的具体用例,但无论如何,将整个视频保存在内存中是必要的,甚至是可能的。

    【讨论】:

    • 感谢您的回答。这应该不是问题,因为我想在内存中最多存储 1 或 2 秒,因此我将拥有整个事件的镜头。触发运动检测器的那一刻,所有内容都可以保存在硬盘上。正如我在上面解释的那样,问题是有时运动检测器发出信号太晚了(因为它每秒更新一次以节省 CPU)。这就是为什么我想在开始录制之前将镜头保存在内存中并“真实”保存。
    • 如果您发现性能还可以并且对 SD 卡性能感到满意,您的写入和删除方法可能会为您提供更大的灵活性并允许更安全的时间缓冲 - 有不同的报告显示多长时间它们持续不断地写入,并且可能也取决于品牌。如果它是关键应用程序,您可能需要某种冗余和/或网络备份。
    • 应该没问题,但是如何在opencv中创建内存缓冲区?
    • 你的意思是在你阅读的时候把你的名声放进去?当您为一个框架定义一个 Mat 时(例如,在 c++ 中:Mat frame),然后从相机或文件中读取一个框架,那么这是在内存中而不是在磁盘等中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2018-06-20
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多