5

私は最近、大量の画像をつなぎ合わせて大規模なパノラマを作成することを目的として、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

どんな助けでも大歓迎です、ありがとう!

4

3 に答える 3

2

OpenCV の APP traincascade を実行すると、あなたと同じエラーが発生します。

Insufficient memory (Failed to allocate XXXXXXXXXX bytes) in unknown function, 
    file C:\slave\winInstallerMegaPack\src\opencv\modules\core\src\alloc.cpp, 
    line 52

当時、私の RAM(6G) の約 70% しか占有されていませんでした。そして、trainscascade を段階的に実行すると、約 1.5G 以上の RAM スペースを使用すると、エラーがスローされることがわかりました。次に、使用するメモリの量を制御できる 2 つの引数を見つけました。

-precalcValBufSize -precalcIdxBufSize なので、これら 2 つを 128 に設定しようとしましたが、実行されました。私の経験がお役に立てば幸いです。

この問題はメモリ リークに関するものではなく、OS がアプリケーションを占有するメモリの数に関連しているだけだと思いました。誰かが私の推測を確認できることを期待しています。

于 2013-04-22T06:44:34.657 に答える
0

これは、ステッチの順序に関連している可能性があります。大きな画像を3 * 3に分割し、最初に行ごとにステッチしますが問題はありません。列ごとにステッチすると、あなたと同じ問題があります.

于 2014-08-05T09:27:26.470 に答える