0

かなり小さなビデオでモーション検出を行っています。288x384xRGB の 56 フレーム。私はそれのコピーを 2 つ保持しているので、他の変数を含めると約 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

だから、実際は私が提案したよりも小さいです...

4

2 に答える 2

0

使用する必要があります

zeros(..., 'uint8')

それよりも

uint8(zeros(...))

最初に倍精度で配列を作成してから配列にコピーすることを避けるためuint8

于 2013-04-03T11:47:09.120 に答える
0

詳しくは調べていませんが、Matlab によって課せられるオーバーヘッドがほとんどない場合は驚くでしょう。おそらく、想像以上に多くのメモリを使用しています。

処理するフレーム数を減らしてみて、問題が解決するかどうかを確認してください。

于 2013-04-02T16:39:40.557 に答える