Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在OpenCV中将视频写入内存_Python_Python 3.x_Opencv_Video_Video Capture - Fatal编程技术网

Python 如何在OpenCV中将视频写入内存

Python 如何在OpenCV中将视频写入内存,python,python-3.x,opencv,video,video-capture,Python,Python 3.x,Opencv,Video,Video Capture,你能把视频写入内存吗?我使用Raspberry Pi,我不想继续写入和删除sd卡上创建的videowriter对象(或者这样做可以吗?) 如果条件不满足,我想放弃书面视频每秒钟。我使用的是一种运动检测器记录,我想捕捉到运动被检测到之前的瞬间(在本例中为1秒),因为否则写入的视频会丢失所发生的部分内容。我在python环境中使用opencv。视频文件通常会太大,甚至通常会太大,无法放入主内存,因此您不太可能将整个视频保存在主内存中 还值得注意的是,您的操作系统本身可能会决定在快内存、慢内存、磁盘等

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


如果条件不满足,我想放弃书面视频每秒钟。我使用的是一种运动检测器记录,我想捕捉到运动被检测到之前的瞬间(在本例中为1秒),因为否则写入的视频会丢失所发生的部分内容。我在python环境中使用opencv。

视频文件通常会太大,甚至通常会太大,无法放入主内存,因此您不太可能将整个视频保存在主内存中

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

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

  • 从摄像机或源流接收视频帧
  • 对视频帧进行一些处理-例如,对其进行转码、检测对象、添加文本或图像等
  • 将更新的帧存储或发送到某个位置
  • 回到第一步
在这样的流中,在处理帧时将其保留在内存中显然是有好处的,但一旦这样做,通常就不再有好处了,因此可以将其移动到磁盘或发送到目标

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


我认为最好的答案取决于您的具体用例,但不管是什么,将整个视频保存在内存中都不太可能是必要的,甚至是可能的。

谢谢您的回答。这不应该是个问题,因为我想在内存中存储最多1或2秒,这样我就有了整个事件的录像。一旦触发运动检测器,一切都可以保存在硬盘上。正如我在上面解释的那个样,问题是有时运动检测器给出的信号太晚了(因为它每秒更新一次以节省cpu)。这就是为什么我想在开始录制之前将片段保存在内存中,并“真实地”保存。您的写入和删除方法可能会给您带来更大的灵活性,并提供更安全的时间缓冲,如果您发现性能正常,并且您对SD卡的性能感到满意,则会有不同的报告显示其持续写入的时间,这可能还取决于品牌。如果它是一个关键的应用程序,你可能需要某种冗余和/或备份到网络上。它本来应该很好,但我如何在opencv中创建内存缓冲区?你的意思是在阅读它们时把你的名声放进去?当您为一个帧定义一个Mat(例如,在c++中:Mat frame),然后将一个帧从相机或文件中读取到其中时,则该帧在内存中,而不是在磁盘上等。