私は最近、大量の画像をつなぎ合わせて大規模なパノラマを作成することを目的として、OpenCVの使用を開始しました。実験を開始するために、OpenCVファイルに付属しているサンプルプログラムを調べて、OpenCVライブラリを実装する方法について考えました。画像のステッチに興味があったので、「stitching_detailed.cpp」に直行しました。コードは次の場所にあります。
https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/stitching_detailed.cpp?rev=6856
さて、このプログラムは私が必要とすることのほとんどを実行しますが、私は何か面白いことに遭遇しました。オプションのプロジェクションワーパーの15個のうち9個について、プログラムを実行しようとすると、次のエラーが発生することがわかりました。
Insufficient memory (Failed to allocate XXXXXXXXXX bytes) in unknown function,
file C:\slave\winInstallerMegaPack\src\opencv\modules\core\src\alloc.cpp,
line 52
ここで、「X」は、さまざまなタイプの投影間で変化する整数を示します(さまざまな方法で必要なスペースの量が異なるかのように)。「alloc.cpp」の完全なソースコードは、次のWebサイトにあります。
https://code.ros.org/trac/opencv/browser/trunk/opencv/modules/core/src/alloc.cpp?rev=3060
ただし、alloc.cppでこのエラーを発行するコード行は次のとおりです。
static void* OutOfMemoryError(size_t size)
{
--HERE--> CV_Error_(CV_StsNoMem, ("Failed to allocate %lu bytes", (unsigned long)size));
return 0;
}
したがって、このエラーが発生している可能性のある考えられる理由について、私は単に迷っています。このエラーは通常、システムのメモリが不足している場合に発生することを認識していますが、タスクマネージャーによると、テストイメージでこのプログラムを実行すると、3.5GBを超えるRAMを使用することはありません。
また、このプログラムはOpenCV開発者によるOpenCVスティッチング機能のサンプルとして作成されているため、ソースコード内に大幅なメモリエラーが存在することは信じられません。
最後に、ワーピング方法のいくつかを使用すると、プログラムは正常に機能します。
- spherical
- fisheye
- transverseMercator
- compressedPlanePortraitA2B1
- paniniPortraitA2B1
- paniniPortraitA1.5B1)
ただし、他のいずれかを使用するようにプログラムに要求する場合(コマンドラインタグ
--warp [PROJECTION_NAME]を使用):
- plane
- cylindrical
- stereographic
- compressedPlaneA2B1
- mercator
- compressedPlaneA1.5B1
- compressedPlanePortraitA1.5B1
- paniniA2B1
- paniniA1.5B1
上記のエラーが発生します。横メルカトル図法ワーパーからはかなり良い結果が得られますが、特にステレオグラフィックをテストしたいと思います。誰かが私がこれを理解するのを手伝ってもらえますか?
私が処理しようとしている画像の解像度は1360x1024で、コンピューターの統計情報は次のとおりです。
Model: HP Z800 Workstation
Operating System: Windows 7 enterprise 64-bit OPS
Processor: Intel Xeon 2.40GHz (12 cores)
Memory: 14GB RAM
Hard Drive: 1TB Hitachi
Video Card: ATI FirePro V4800
どんな助けでも大歓迎です、ありがとう!