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 )
	{
		批处理()
		清空帧数组,释放内存
	}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值