OpenCVのカメラ入力で発生するエラーへの対処法

OpenCVでカメラからの画像を入力するときに発生したエラーについてまとめます.

動作環境

  • OS: Windows 7
  • 開発環境: Visual Studio 2012 C++
  • OpenCVのバージョン: 2.4

USB接続のWebカメラから画像を取得して表示させようと以下のページを参考にコードを書きました.
入出力とGUI — OpenCV-CookBook

これを上記の環境でコンパイルして実行すると,うまく動作するときもありましたが,
まれに以下のようなエラーメッセージが表示されました.
opencv_videocapture1

また,コンソール画面には,

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file ……
というようなメッセージが表示されており,imshow関数でエラーが発生していることが確認できます.

このエラーは,“cap >> frame;”として画像をキャプチャするとき,正しくキャプチャされないとMatに画像が入らず,その状態でimshow関数で表示しようしたことが原因で発生したと考えられます.

対処法としては,

というように正しくキャプチャされるまで待つようにすることで,エラーなく動作させることができます.
よって,全体としては以下のようなコードとなります.これでまったくエラーが発生しなくなりました.