मेरे पास 250fps पर एक उच्च स्पीड फ्रेमग्रेबर से छवियों में लेने के लिए एक लूप है।दूसरे धागे, ओपनसीवी में छवि प्रदर्शित करें?
/** Loop processes 250 video frames per second **/
while(1){
AcquireFrame();
DoProcessing();
TakeAction();
}
साथ ही, मैं उपयोगकर्ता को यह देखने में सक्षम होना चाहता हूं कि क्या हो रहा है। उपयोगकर्ता को केवल 30 एफपीएस (या कम) पर छवियों को देखने की आवश्यकता है। मैं एक दूसरा धागा कैसे स्थापित करूं जो वर्तमान फ्रेम को हर बार प्रदर्शित करता है?
Thread(){
cvShowImage();
Wait(30); /** Wait for 30 ms **/
}
मैं मिनीगब्लू, जीसीसी और ओपनसीवी 1.1 का उपयोग कर क्वाड कोर इंटेल मशीन पर विंडोज़ पर हूं। मुख्य मानदंड यह है कि डिस्प्ले थ्रेड को जितना संभव हो सके मेरे मुख्य प्रोसेसिंग लूप से थोड़ा समय लेना चाहिए। प्रत्येक मिलीसेकंद मायने रखता है।
मैंने CreateThread()
का उपयोग cvShowImage()
और cvWaitKey()
और apparently those functions are not threadsafe के साथ एक नया धागा बनाने के लिए किया है।
मैं ओपनएमपी का उपयोग करने पर विचार कर रहा हूं, लेकिन कुछ लोग report problems with OpenMP and OpenCV। मैं डायरेक्टएक्स डायरेक्टड्रा का उपयोग करने की कोशिश करने पर भी विचार कर रहा हूं क्योंकि स्पष्ट रूप से यह बहुत तेज़ है। लेकिन यह looks complicated और स्पष्ट रूप से problems using Windows DLL's with MinGw हैं।
इनमें से कौन सा मार्ग शुरू करने के लिए सबसे अच्छी जगह होगी?
क्या यह सिर्फ 8% कैप्चर (250/30) प्रदर्शित करने के लिए केवल एक शर्त और "गिनती" चर का उपयोग करने के लिए पर्याप्त नहीं है? –
आह हाँ। लेकिन यदि आप ऐसा करते हैं, तो पूरा कार्यक्रम 8 वें कैप्चर को प्रदर्शित करते समय रोक लगाता है। CvShowImage का उपयोग करके एक छवि प्रदर्शित करने में ~ 10 एमएस लगते हैं। उस समय तक आप कुछ फ्रेम पहले ही चूक चुके हैं। – AndyL
क्या आपको कैमरे से 250 एफपीएस मिल रहे हैं? यदि आप हैं तो आप मुझे बता सकते हैं कि आपने यह कैसे किया? वह बेहद तेज़ है। – bakalolo