2012-02-17 20 views
7

आप कैसे जांचते हैं कि ओपनसीवी विंडो बंद है या नहीं?यह कैसे जांचें कि ओपनसीवी विंडो बंद है या नहीं

मुझे क्या करना चाहते हैं:

cvNamedWindow("main", 1); 

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

लेकिन इन ऐसी कोई cvWindowIsClosed (...) समारोह है!

+0

वर्षों में ऐसा कुछ भी नहीं चाहिए। आप क्या करने की कोशिश कर रहे हैं, बिल्कुल? शायद आप जो कुछ खोज रहे हैं उसे हासिल करने के लिए कुछ और तरीका है। – karlphillip

+0

@karlphillip मैं उपयोगकर्ता को विंडो बंद करने तक नए फ्रेम प्रस्तुत करना चाहता हूं। – Steve

उत्तर

7

तुम क्या करने कोशिश कर रहे हैं cvGetWindowHandle() के साथ प्राप्त किया जा सकता है:

समारोह cvGetWindowHandle (जीटीके + के मामले में HWND Win32 और GtkWidget के मामले में) देशी खिड़की संभाल देता है। [क्यूटी बैकएंड केवल] क्यूटी-विशिष्ट विवरण: फ़ंक्शन cvGetWindowHandle Qt क्लास QWidget से विरासत में प्राप्त मूल विंडो हैंडल देता है।

विचार खिड़की के हैंडल को प्राप्त करना है और फिर यह जांचने के लिए विशिष्ट प्लेटफार्म एपीआई फ़ंक्शंस का उपयोग करना है कि यह संभाल अभी भी वैध है या नहीं।

संपादित करें:

या आप 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

मान लीजिए आप केवल एक छवि विंडो खुली है, तो इसकी कोने में 'एक्स' बटन पर क्लिक waitkey का कारण बनता है() फ़ंक्शन एक -1 मान वापस करने के लिए। फिर जांचें कि क्या cvGetWindowHandle ("name_of_the_window") फ़ंक्शन 0 देता है या नहीं। अगर यह 0 लौटाता है, तो विंडो वास्तव में बंद हो जाती है। मैंने इसे ओपनसीवी 3 में परीक्षण किया है। लेकिन मैं अभी भी वेटकी() वापसी के कारण पर बहुत स्पष्ट नहीं हूं। अगर कोई बताता है कि ऐसा क्यों होता है तो मैं बहुत सराहना करता हूं। [मुझे नहीं पता कि इस प्रश्न का मेरा उत्तर प्रासंगिक होगा या इतने लंबे समय के बाद नहीं। लेकिन उम्मीद है कि अगर कोई और एक ही मुद्दे (मेरे जैसा) से फंस जाता है, तो यह उत्तर उन्हें मदद कर सकता है।] धन्यवाद।

1

यह कर

#include <opencv2/opencv.hpp> 

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

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

आप सीवी :: getWindowProperty विधि का उपयोग कर सकते हैं करना चाहिए।

कि पसंद है:

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।

संबंधित मुद्दे