C API OpenCV を使用して C の古いコードを更新しています。それらを使用していくつかのアルゴリズムを作成するには、メモリに少なくとも 300 個の画像を読み込む必要があります。
そのため、ディスクからロードしてそれぞれ 1 つの操作を行う代わりに、そのイメージをメモリにロードして操作を高速化できると考えていました。
それを行う最善の方法は何ですか?
C コードを使用している場合、明示的に解放するまで、イメージは自動的にメモリに残ります。cvLoadImage
ディスクからロードする各イメージを呼び出すだけです。IplImage*
ポインターを見失わないように、ポインターを大きな配列に格納することをお勧めします。完了したら、呼び出すだけcvReleaseImage
でメモリがすべて解放されます。
あなたが言及したように、ロード中にメモリが不足しないように注意する必要があります。その場合、サブセットのみをメモリにロードし、残りをディスクに保持する以外に選択肢はありません。
これを行うことによるパフォーマンスの向上は、ほとんどのアプリケーションではごくわずかであるため、問題を起こす価値すらありません。利益があることを確認する唯一の方法は、それを実行して時間を測定することです。
このアプローチの問題は、画像のサイズによっては、一度にすべてを保存するためにRAMメモリが不足する可能性があることです。