もさぷい

ゲーム、3D関連技術ついて

OpenCVのウィンドウが生きているか判定する方法

OpenCVを用いて、USBカメラで撮影した画像をウィンドウに表示するプログラムを作った時、ウィンドウの閉じるボタンを押すと無限ループになってしまった。

これは、困った。ウィンドウが生きているかどうかを確認できれば、無限ループを回避できるはず。

 そこで、以下のような方法でウィンドウが生きているかどうかを確認することで、無限ループを回避できました。

 


カメラで撮影した画像をウィンドウに表示するコードは、通常、以下のようになります。

 

cvNamedWindow("Test", CV_WINDOW_AUTOSIZE);//ウィンドウ作る

while(true)

{

~処理とか~

int c = cvWaitKey(10);

if(-1 != c){ break; }//なにかキーが押されたら、ループ抜ける。

}

 

しかし、上記のようなコードを書いてウィンドウを表示した場合にウィンドウの閉じるボタンを押すと、上記のコードは無限ループとなります。

 

無限ループは困るので、以下のようにcvGetWindowHandle関数を使って、ウィンドウの生存を確かめることで、無限ループを回避できます。

 

while(true)

{

~処理とか~

 

//ウィンドウが生きているかチェック。NULLなら消えている。

void* life = cvGetWindowHandle( "Test" );

 

int c = cvWaitKey(10);

 

//なにかキーが押されたら、ループ抜ける。ウィンドウが消えていたらループ抜ける。

if(-1 != c || NULL == life){ break; }

}