0

我正在对一个相当小的视频进行运动检测。56 帧 288x384xRGB。我保留了它的两份副本,所以它应该达到大约 40 Mb 的顶部,包括我的其他变量。

现在,这条线给了我一个内存不足的错误

output = uint8(zeros(this.videoHeight,2.*this.videoWidth,3,size(this.originalFrames,4)));

打字记忆报告

 >> memory
Maximum possible array:             202 MB (2.114e+08 bytes) *
Memory available for all arrays:    863 MB (9.045e+08 bytes) **
Memory used by MATLAB:              527 MB (5.526e+08 bytes)
Physical Memory (RAM):             3071 MB (3.220e+09 bytes)

*  Limited by contiguous virtual address space available.
** Limited by virtual address space available.
>> 

我是 MATLAB 新手,但对编程并不陌生。我不明白什么?

编辑 所以我做了一些处理:

        disp(this.videoHeight)
        disp(2.*this.videoWidth)
        disp(size(this.originalFrames,4))

产生:

288

768

54

所以,它实际上比我建议的要小......

4

2 回答 2

0

我没有详细查看,但如果 Matlab 没有产生很多开销,我会感到惊讶。您使用的内存可能比您想象的要多得多。

尝试调低您处理的帧数,看看是否能解决问题。

于 2013-04-02T16:39:40.557 回答
0

你应该使用

zeros(..., 'uint8')

而不是

uint8(zeros(...))

避免先以双精度创建数组,然后将其复制到uint8数组中。

于 2013-04-03T11:47:09.120 回答