• ベストアンサー

openCVのキャプチャ動作が安定しません

openCVを利用してカメラから画像キャプチャ→avi書き込みをしています。 キャプチャを5分以上続けているとフリーズしそうになったり、 フリーズしたりと動作が安定しません。 そのため、ファイル書き込みもうまく保存されないときがあります。 どのようにすれば安定するのでしょうか。 またはOpenCV以外を探すべきなのでしょうか。 プログラムのソースはhttp://opencv.jp/sample/video_io.htmlを参考にしています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>キャプチャを5分以上続けているとフリーズしそうになったり、 >フリーズしたりと動作が安定しません。 メモリリーク(メモリの開放忘れなど)やリソースの消費し過ぎ(取得したハンドラの開放忘れなど)などがあると、メモリやリソースが不足し、OSが不安定になり、最悪、フリーズします。 システムモニターなどで、メモリ、リソースの使用量が増加し続けていないか、確認しましょう。 メモリの開放忘れや、取得したハンドラの開放忘れなどが無ければ、ある程度までメモリ、リソースの使用量が増加すると増加は止まり、それ以上は使用量が増加しなくなる筈です。 >どのようにすれば安定するのでしょうか。 メモリリーク(メモリの開放忘れ)やリソースの消費し過ぎ(取得したハンドラの開放忘れ)などがないかプログラムを徹底検証して、メモリやリソースが不足しないようにしましょう。 >またはOpenCV以外を探すべきなのでしょうか。 いいえ。 OpenCVを用いて、1時間でも2時間でも、ディスクの空きがある限り、ちゃんと録画出来ているプログラムが存在しています。 つまり「OpenCVが悪い」のではなくて「OpenCVの使い方が悪い」のであって、OpenCVには何も問題はありません。 >プログラムのソースはhttp://opencv.jp/sample/video_io.htmlを参考にしています。 こういうサンプルソースは「要点のみ記載」されていて「必要な前処理」や「必要な後始末」が記載されていない場合があります。 場合によっては「開放する処理は、書かなくても判るだろう。用が済んだら開放するのが当たり前だから」と言う事で「メモリを開放する部分が省略されてる」とか「ハンドラを開放する部分が省略されてる」など、色々と省略されていて、そのままでは使用できない事があります。 サンプルソースは、あくまでも「何をするか」のサンプルであり「これをした後はどういう後始末が要るか」はサンプルソースには書かれないのが普通です。

その他の回答 (1)

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

http://opencv.jp/sample/video_io.html ソースを見ましたが、一見すると、解放処理についても記述されていますし、 独自にnewやmallocして、解放していない箇所もないようです。 しかし、この種のライブラリではライブラリ内部でメモリの割り当てを行い、 専用関数で解放するようになっているケースが多く、 ソースを一見しただけでは、リークの発見が困難なことも多いです。 ですから、 メモリーリーク検出を有効にされることをお勧めします。 http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/MemLeaks/default.htm#2 これで、明らかにリークがあることがわかったなら、 #if 0 ~ #endif などで、 プログラムの一部をコメント・アウトするなどして どうしたら、リークが発生し、 どうすればリークがなくなるか 条件を噛みましょう。 条件がわかれば、 おのずと原因究明に近づくことでしょう。 メモリーリーク検出が正しく動作していることを確認するために、 最初に”わざと"リークを含ませる (ex. 100バイトmallocして解放しないなど) ことをして、動作確認しておくことをお勧めします。

関連するQ&A