2010-10-24 28 views
7

के साथ लेजर लाइट डिटेक्शन मैं वेबकैम के साथ एक लेजर लाइट डॉट (जो दीवार पर है) को ट्रैक करना चाहता हूं और मैं इस कार्य को करने के लिए ओपनसीवी का उपयोग कर रहा हूं। क्या कोई मुझे सी ++ के साथ ऐसा करने का तरीका सुझा सकता है।ओपनसीवी और सी ++

धन्यवाद!

+0

का उपयोग कर यह संभव है किसी तरह का उपयोग करने के लिए पंजीकृत रंग की तुलना में है वेबकैम के सामने एक फ़िल्टर अगर ऐसा है तो वे फ़िल्टर क्या हैं? – Keshan

+0

यह तथ्य है कि प्रकाश स्रोत वास्तव में आपके लिए एक लेजर है, या आप केवल एक का उपयोग कर रहे हैं क्योंकि यह एक उज्ज्वल बिंदु बनाने का एक सुविधाजनक तरीका है? यही है, क्या आपके पास यह देखभाल करने का कोई कारण है कि स्रोत मोनोक्रोमैटिक है और चरण मिलान किया गया है? यदि हां, तो सतह के ऑप्टिकल गुण क्या हैं जो डॉट पर अनुमान लगाया जाता है (समतलता, आदि ...)? – dmckee

+0

क्या आप सिर्फ छोटे क्षेत्र के लिए छवि को स्कैन कर सकते हैं जिसमें लाल घटक के साथ पड़ोसी क्षेत्र की तुलना में तीव्रता से तीव्रता हो सकती है? – Dialecticus

उत्तर

7

आपके पास अपनी पृष्ठभूमि की स्थिरता और छवियों के साथ जो चीजें आप करना चाहते हैं, उसके आधार पर आपके पास तीन विकल्प हैं।

आप अपनी छवि को इतना अंधेरा बना सकते हैं कि केवल एक चीज जिसे आप देख सकते हैं वह लेजर-पॉइंट है। आप डायाफ्राम को बंद करके और/या शटर समय को कम करके ऐसा कर सकते हैं। सस्ते वेबकैम के साथ भी यह आमतौर पर ड्राइवर में किया जा सकता है। एक बार ऐसा करने के बाद लेजर बिंदु खोजने का काम बहुत आसान है। आप छवि को जितना संभव हो उतना अंधेरा बनाते हैं क्योंकि आमतौर पर वह बिंदु जहां लेजर चमकता है, कैमरे को लेने के लिए रास्ता बहुत उज्ज्वल है। इसका मतलब है (जैसा कि आपने अनुभव किया है) कि आप छवि में प्रकाश लेजर डॉट और अन्य प्रकाश वस्तुओं के बीच नहीं समझ सकते हैं। इसे गहरा बनाकर अब आप यह कर सकते हैं।

यदि आपके पास अपनी छवि के लिए अन्य उपयोग हैं (इसे लोगों को दिखा रहा है) और आपकी पृष्ठभूमि स्थिर है तो आप "पृष्ठभूमि" के रूप में अंतिम कुछ वीडियो छवियों का औसत भी उपयोग कर सकते हैं और फिर उस स्थान को ढूंढ सकते हैं जहां एक बड़ा है उस पृष्ठभूमि और नवीनतम छवि के बीच अंतर। यह आमतौर पर लेजर की ओर इशारा किया जाता है (फिर, यदि आपकी पृष्ठभूमि पर्याप्त स्थिर है)।

अंत में, यदि आपकी पृष्ठभूमि स्थिर नहीं है और आप अपनी छवि को बहुत अंधेरा नहीं बनाना चाहते हैं तो आपका अंतिम विकल्प उन सभी पिक्सेल को देखना है जो लाल चैनल में बहुत उज्ज्वल हैं और चमकदार हैं और नीला (यदि आप लाल लेजर का उपयोग कर रहे हैं)। यह प्रणाली अभी भी सफेद धब्बे से विचलित हो जाएगी, लेकिन उतनी ही चमकदार पिक्सेल खोजने के लिए नहीं। यदि आपके लेजर-पॉइंटर स्पॉट का केंद्र वास्तव में लेजर रंग की परवाह किए बिना चमकदार सफेद के रूप में दिखाई दे रहा है तो यह तकनीक आपको इस उज्ज्वल स्थान के चारों ओर "छल्ले" ढूंढने की अनुमति देगी (डॉट का बाहरी हिस्सा जहां लेजर उतना उज्ज्वल नहीं है यह केंद्र में है ताकि यह छवि में लेजर के वास्तविक रंग के साथ दिखाई दे)। फिर आप इन सर्कल को भरने के लिए सरल morphological operations का उपयोग कर सकते हैं, (शायद closing पर्याप्त है)।

+0

मुझे लगता है कि मैं पहले दो विकल्पों को बेहतर तरीके से आजमाऊंगा और ऐसा लगता है कि यह संभव है :)। आपका बहुत बहुत धन्यवाद। – Keshan

4

मान लें कि आप इनमें से किसी एक रंग का लेजर का उपयोग करते हैं: लाल, हरा, नीला। यदि लेजर डॉट बहुत उज्ज्वल दिखाई देता है (कम से कम एक चैनल में, उदाहरण के लिए लाल) तो बस छवि/चैनल को थ्रेसहोल्ड करना, 200 के ग्रेवल्यू कहते हैं, आपको लेजर लाइट के लिए कुछ उम्मीदवारों के साथ छोड़ देगा। यदि अन्य चैनल इस क्षेत्र में अंधेरे (एआर) हैं, तो आप जानते हैं कि यह सही रंग की चमकदार रोशनी है। आकार के अनुसार थोड़ा फ़िल्टरिंग, और आपके पास जगह खोजने का एक अच्छा मौका है।

+0

उत्तर के लिए धन्यवाद मेरे पास एक दीवार है और यह अनुमान लगाया जा रहा है, जब मैं छवि को ट्रेसहोल्ड करता हूं और लाल चैनल की तलाश करता हूं तो कभी-कभी अनुमानित सतह में लाल रंग कुछ परेशानी का कारण बन सकता है। – Keshan

3

आप अपने वेब कैमरा पर एक आईआर फिल्टर छड़ी है, तो अपने प्रक्षेपण उठाया नहीं किया जाएगा, लेजर बिंदु बहुत आसान है कि लेजर सूचक मानते हुए है (साधारण पृष्ठभूमि घटाव आदि का प्रयोग करके) का पता लगाने के बनाने का उत्सर्जन करता है आईआर प्रकाश ...

0

टेम्पलेट मशीनिंग आज़माएं। पहले आप एक विशिष्ट स्थान पर "पॉइंटर इंगित करें" ताकि मंदिर किया जा सके। तो आप बस इसके लिए देखो।

या, जैसा कि जिल्स डी बुद्धि ने कहा था, आप पिछले 2 फ्रेमों का अंतर ले सकते हैं, शायद अंतर आपको सूचक दिखाएगा।

अंतिम 2 फ्रेम ग्रे पैमाने पर कनवर्ट करें, फिर एसयूबी फ़ंक्शन लागू करें।

1

जैसा कि अन्य उत्तरों में सुझाया गया है, रंग की तलाश करना एक अच्छा विचार हो सकता है। आपको एक विशिष्ट रंग सीमा की तलाश करने पर विचार करना चाहिए। ऐसा करने का सबसे अच्छा तरीका तस्वीर को एचएसएल या एचएसवी कलर स्पेस में परिवर्तित करना है।

cv::cvtColor(src, hsv, COLOR_BGR2HSV); 

Wikipedia पर अधिक जानकारी।

फिर आपके पास तीन चैनल हैं: रंग (= रंग), संतृप्ति और हल्कापन (या मूल्य)।

cv::inRange(hsv, cv::Scalar(159, 135, 165), cv::Scalar(179, 255, 200), inRange); के साथ अब आप एक काला और सफेद छवि उत्पन्न कर सकते हैं, जो दिखाता है कि रंग सीमा में कौन से पिक्सल हैं। स्केलर प्रत्येक चैनल के लिए निम्न और उच्च मान हैं।

इस उदाहरण में आप 135 और 255 और मूल्य 165 और

के बीच 200 हो सकता है कि यह अपने ट्रैकिंग सुधार कर सकते हैं के बीच 159 और 179 (रंग) के बीच एक रंग, संतृप्ति के साथ पिक्सल मिल जाएगा।