2012-02-17 17 views
7

¿Cómo verifica si se ha cerrado una ventana de OpenCV?Cómo verificar si una ventana de OpenCV está cerrada

me gusta hacer:

cvNamedWindow("main", 1); 

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

pero éstos es tal función no cvWindowIsClosed (...)!

+0

Nunca necesité algo así en años. ¿Qué estás tratando de hacer exactamente? Lo más probable es que haya otra forma de lograr lo que estás buscando. – karlphillip

+0

@karlphillip Estoy buscando renderizar nuevos cuadros hasta que el usuario cierre la ventana. – Steve

Respuesta

7

Lo que estamos tratando de hacer se puede lograr con cvGetWindowHandle():

El cvGetWindowHandle función devuelve el identificador de ventana nativa (HWND en caso de Win32 y GtkWidget en caso de GTK +). [Qt Backend Only] qt-specific details: la función cvGetWindowHandle devuelve el identificador de ventana nativo que hereda del QWidget Qt class.

La idea es obtener el control de la ventana y luego usar las funciones específicas de la plataforma API para verificar si ese identificador aún es válido.

EDIT:

O usted podría utilizar el tradicional cvWaitKey() enfoque:

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

    // display frame 

    exit_key_press = cvWaitKey(10); 
} 
+0

@Steve Respuesta actualizada. – karlphillip

2

Suponga que tiene una sola ventana de la imagen abierta, a continuación, hacer clic en el botón 'X' en su esquina hace que el WAITKEY() función para devolver un valor -1. Luego verifique si la función cvGetWindowHandle ("nombre_de_la_ventana") devuelve 0 o no. Si devuelve 0, entonces la ventana está realmente cerrada. Lo he probado en OpenCV3. Pero todavía no estoy muy claro sobre el motivo por el que waitkey() regresa -. Apreciaré mucho si alguien explica por qué sucede esto. [No sé si mi respuesta a esta pregunta será relevante o no después de tanto tiempo. Pero con suerte, si alguien más se queda con el mismo problema (como yo), esta respuesta podría ayudarlos.] Gracias.

1

Esto debería hacer

#include <opencv2/opencv.hpp> 

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

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

Puede utilizar el método cv :: getWindowProperty.

me gusta eso:

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

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

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

Cuando se cerrarán las ventanas de la getWindowProperty devolverá -1.

Cuestiones relacionadas