我正在对一个相当小的视频进行运动检测。 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的新手,但并不是全新的编程。我不明白的是什么?
修改 的 所以我做了som disp'ing:
disp(this.videoHeight)
disp(2.*this.videoWidth)
disp(size(this.originalFrames,4))
产生
288
768
54
所以,它实际上比我建议的要小......
答案 0 :(得分:0)
我没有详细查看,但如果没有相当多的Matlab强加的开销,我会感到惊讶。你可能会使用比你想象的更多的内存。
尝试调低您处理的帧数,看看是否能解决问题。
答案 1 :(得分:0)
你应该使用
zeros(..., 'uint8')
而不是
uint8(zeros(...))
首先避免以双精度创建数组,然后将其复制到uint8
数组。