我是靠谱客的博主 呆萌乌龟,最近开发中收集的这篇文章主要介绍Opencv3.0-python的那些事儿:(九)、Opencv关于如何读取大量视频帧进行处理的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一个真实的项目需求,需要读取视频的帧然后对这些帧做数据处理,因此用的是opencv3.0(python)来做的,熟悉opencv3.0的朋友知道,它提供了VideoCapture方法可以读取视频,并生成帧。
刚开始,我是把从视频中所有的帧全部存在一个数组中,然后处理。后来发现在1GB内存的Ubuntu中,1个1分55秒的视频,平均帧率为10帧/s,生成了1100多帧,然后内存耗尽,Ubuntu系统死机。
分析:以一个2分钟左右,平均帧率为10帧/秒的视频为例进行分析,如果设保存下来的一帧大概转换成图片约170KB,1000帧大概占的内存就有170M,如果机器的内存不大的话,机器可能内存耗尽。
解决方法:
1、后来尝试把Ubuntu内存容量开到2GB,勉勉强强跑起来,但是这才只是一个2分钟的视频,显然这样做无疑是杯水车薪,一旦碰到几十分钟的视频,内存更大的机器一般也会起不来。
2、一个好的方法是用批处理来做,每次处理k个帧(比如500帧),处理完了之后就把保存帧的数组清空,把占的内存释放掉,继续做下一批处理。
这个思想同样应该可以迁移到大数据处理上。
下面以批处理的数量500为例,具体描述批处理算法的框架
i=0
while(视频没有读取完)
{
把当前帧存入数组
if ( (i+1) % 500 == 0 )
{
批处理()
清空帧数组,释放内存
}
i++
}
if(帧数组不空)
{
批处理()
清空帧数组,释放内存
}
最后
以上就是呆萌乌龟为你收集整理的Opencv3.0-python的那些事儿:(九)、Opencv关于如何读取大量视频帧进行处理的方法的全部内容,希望文章能够帮你解决Opencv3.0-python的那些事儿:(九)、Opencv关于如何读取大量视频帧进行处理的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复