C API OpenCVで古いコードを更新しているので、それらのアルゴリズムを使うために少なくとも300画像をメモリにロードする必要があります。opencvを使ってメモリに画像セットをロードする
私は、ディスクからロードして1つずつ操作するのではなく、操作をより高速にするために、そのイメージをメモリにロードできると考えていました。
これを行うにはどうすればよいですか?
C API OpenCVで古いコードを更新しているので、それらのアルゴリズムを使うために少なくとも300画像をメモリにロードする必要があります。opencvを使ってメモリに画像セットをロードする
私は、ディスクからロードして1つずつ操作するのではなく、操作をより高速にするために、そのイメージをメモリにロードできると考えていました。
これを行うにはどうすればよいですか?
Cコードを使用している場合、イメージは明示的に解放されるまで自動的にメモリに残ります。ディスクからロードする各画像にcvLoadImage
と電話するだけです。 IplImage*
ポインタを大きな配列に格納することをお勧めします。そうすれば、ポインタを失うことはありません。完了したら、cvReleaseImage
と呼ぶだけで、メモリはすべて解放されます。
あなたが言及したように、あなたはメモリが足りなくなっていないことをロードしているので注意する必要があります。そうするならば、サブセットをメモリにロードし、残りの部分をディスク上に残すだけです。
これを実行することによるパフォーマンスの向上は、ほとんどのアプリケーションではほとんど問題にならないと考えています。利益があることを確かめる唯一の方法は、それを行い、時間を測定することです。
あなたのアプローチの問題は、イメージのサイズによっては、RAMメモリが足りなくなり、すべてを一度に保存できることです。
Uhhh ...ディスクからデータをメモリにプリロードすることによるパフォーマンスの向上は問題ありませんか?説明していただけますか? – zrxq
私は、このプラクティスが常に問題の価値があると述べる研究を見たいと思っています。実際、これはすべての単一のアプリケーションでは当てはまりません。 edsonlp1は、彼がアプローチに落ち着く前に、彼の利益をテストし測定しなければならないでしょう。 – karlphillip
私は、操作が画像上で連続的に行われるかどうかに完全に依存すると思う。操作を連続して行うことができない場合(すなわち、1つの画像上のすべての操作を行い、次に次の画像に移動する場合)、画像をメモリに保持することによる大きな利益がある。そうでなければ、ポイントはありません。なぜなら、ロードしてディスクに保存する必要があるからです。別のマシンで処理している間に1つのスレッドでロードすることでマイルドな利益があるかもしれませんが、おそらく小さいでしょう... – aardvarkk
ありがとうございます。私は大きな配列のIplImage *を実行し、すべての画像をメモリにロードします。これは私のために完璧に動作します。 – edsonlp1