2012-04-25 4 views
0

C API OpenCVで古いコードを更新しているので、それらのアルゴリズムを使うために少なくとも300画像をメモリにロードする必要があります。opencvを使ってメモリに画像セットをロードする

私は、ディスクからロードして1つずつ操作するのではなく、操作をより高速にするために、そのイメージをメモリにロードできると考えていました。

これを行うにはどうすればよいですか?

答えて

1

Cコードを使用している場合、イメージは明示的に解放されるまで自動的にメモリに残ります。ディスクからロードする各画像にcvLoadImageと電話するだけです。 IplImage*ポインタを大きな配列に格納することをお勧めします。そうすれば、ポインタを失うことはありません。完了したら、cvReleaseImageと呼ぶだけで、メモリはすべて解放されます。

あなたが言及したように、あなたはメモリが足りなくなっていないことをロードしているので注意する必要があります。そうするならば、サブセットをメモリにロードし、残りの部分をディスク上に残すだけです。

+0

ありがとうございます。私は大きな配列のIplImage *を実行し、すべての画像をメモリにロードします。これは私のために完璧に動作します。 – edsonlp1

0

これを実行することによるパフォーマンスの向上は、ほとんどのアプリケーションではほとんど問題にならないと考えています。利益があることを確かめる唯一の方法は、それを行い、時間を測定することです。

あなたのアプローチの問題は、イメージのサイズによっては、RAMメモリが足りなくなり、すべてを一度に保存できることです。

+0

Uhhh ...ディスクからデータをメモリにプリロードすることによるパフォーマンスの向上は問題ありませんか?説明していただけますか? – zrxq

+0

私は、このプラクティスが常に問題の価値があると述べる研究を見たいと思っています。実際、これはすべての単一のアプリケーションでは当てはまりません。 edsonlp1は、彼がアプローチに落ち着く前に、彼の利益をテストし測定しなければならないでしょう。 – karlphillip

+0

私は、操作が画像上で連続的に行われるかどうかに完全に依存すると思う。操作を連続して行うことができない場合(すなわち、1つの画像上のすべての操作を行い、次に次の画像に移動する場合)、画像をメモリに保持することによる大きな利益がある。そうでなければ、ポイントはありません。なぜなら、ロードしてディスクに保存する必要があるからです。別のマシンで処理している間に1つのスレッドでロードすることでマイルドな利益があるかもしれませんが、おそらく小さいでしょう... – aardvarkk

関連する問題