1

ビジョン ルーチンを使用して、300fps GigE カメラからフレームをキャプチャ (「グラブ」) しています。カメラは、HD が書き込むよりも少し速くフレームを配信できるため、1 つのループでキャプチャし、2 番目の (隣接/並列) ループで読み取られるキューに貼り付けます。最初のループが終了するまで (私が知る限り)、すべてがうまくいきます。つまり、データはすべて取得され、ほとんどが書き込まれ、残りは書き出す必要があるだけです。残念ながら、キューに残ったすべての画像は魔法のようにさかのぼってすべて同じデータになってしまうため、データセットの最後の部分には数百の静的フレームが含まれています。

この動作を回避するにはどうすればよいですか? イメージ バッファ メモリが再利用されないように保持する必要があるリソースがあると思いますが、それは明らかにイメージそのものではありません。(ここでは明示的なカメラのクリーンアップは行いません。)

これが私がやっていることのASCIIアートの描写です(少なくともこれが関連する部分であることを願っています):

          +===============+   +==========+
-queue----@-------Insert--@---@-Empty?---@---Release queue
       |  # GrabImg-^     #   #  |       #
       |  #               #   #  Y->Stop #
       |  # i-(>n?)->Stop #   +==========+
       |  +===============+
       |
       |  +==============+
       \--@-Deleted?--Y  #
          #  |        |  #
          #  N->Get   |  #
          #      |    v  #
          #    Write Stop#
          +==============+

キューの削除を使用して、ループの終わりを知らせています。確かにちょっとずさんなので、off by oneエラーは理解できましたが、off by 2200 エラーは理解できませんでした。これは私が見た中で最悪です。(繰り返しになりますが、すべての画像書き込まれますが、最後はすべて同じです。)

4

1 に答える 1

1

プロデューサーとコンシューマーのループでは、コンシューマーが処理していない場合に次の反復で上書きされないように、プロデューサーはイメージをコピーする必要があります。GrabImg はこの手順を実行しないため、各グラブの前に新しいものを作成し、コンシューマーが処理した各バッファーを解放するように処理する必要があります。

ただし、メモリの問題に注意してください。

于 2012-04-02T23:37:29.903 に答える