2012-02-17 21 views
7

opencvウィンドウが閉じられているかどうかをどうやって確認しますか?opencvウィンドウが閉じているかどうかを確認する方法

私がやりたい:

cvNamedWindow("main", 1); 

while(!cvWindowIsClosed("main")) 
{ 
    cvShowImage("main", myImage); 
} 

が、これらは、そのようなcvWindowIsClosed(...)関数ではありません!何をしようとする

+0

何年もかかることはありませんでした。あなたは何をしようとしていますか?おそらく、あなたが探しているものを達成するための他の方法があります。 – karlphillip

+0

@karlphillipユーザーがウィンドウを閉じるまで、新しいフレームをレンダリングしようとしています。 – Steve

答えて

7

cvGetWindowHandle()で達成することができます:

関数cvGetWindowHandleは(GTK +の場合はWin32とGtkWidgetの場合はHWND)ネイティブウィンドウハンドルを返します。 [Qtバックエンドのみ] qt固有の詳細:関数cvGetWindowHandleは、QtクラスQWidgetを継承したネイティブウィンドウハンドルを返します。

考えられるのは、ウィンドウのハンドルを取得し、特定のプラットフォームAPI関数を使用して、そのハンドルがまだ有効かどうかを確認することです。

EDIT:

それとも、tradicional cvWaitKey()アプローチを使用することができます。

char exit_key_press = 0; 
while (exit_key_press != 'q') // or key != ESC 
{ 
    // retrieve frame 

    // display frame 

    exit_key_press = cvWaitKey(10); 
} 
+0

@Steve更新答え。 – karlphillip

2

はあなたが唯一の画像ウィンドウのオープンがあると、その隅に 'X' ボタンをクリックするとwaitkeyを引き起こし()関数は-1の値を返します。 次に、cvGetWindowHandle( "name_of_the_window")関数が0を返すかどうかを確認します。 0を返すと、ウィンドウは実際に閉じられます。 私はOpenCV3でテストしました。 しかし、私はwaitkey()がなぜ返ってくるのかについて、まだ明確ではありません。なぜこのようなことが起こるのか誰かが説明すれば、私は非常に感謝します。 [私はこの質問に対する私の答えがこのような長い時間の後に適切かどうかわかりません。しかし、うまくいけば、他の誰かが(私のような)同じ問題を抱えているなら、この答えが助けになるかもしれない。] ありがとう。

1

これは、あなたがCV :: getWindowPropertyメソッドを使用することができます

#include <opencv2/opencv.hpp> 

std::string mTitle = "title of my window"; 

while (cvGetWindowHandle(mTitle.c_str())) 
{ 
    // ... 
} 
0

を行う必要があります。

はそのように実行します。ウィンドウが閉じられたとき

cv::namedWindow("main", WINDOW_AUTOSIZE); 

while(1) 
{ 
    cv::imshow("main", myImage); 

    // add this IF. 
    if (cv::getWindowProperty("main", WND_PROP_AUTOSIZE) == -1) 
     break; 
} 

はgetWindowPropertyは-1を返します。

関連する問題