कई लोगों के लिए, इमेज प्रोसेसिंग एक डरावना और कठिन काम लग सकता है लेकिन यह उतना कठिन नहीं है जितना कि कई लोगों ने सोचा था। इस ट्यूटोरियल में हम python के साथ openCv में बेसिक कलर डिटेक्शन कर रहे हैं।
कंप्यूटर पर रंग कैसे काम करता है?
हम कंप्यूटर पर कलर-स्पेस या कलर मॉडल द्वारा रंगों का प्रतिनिधित्व करते हैं जो मूल रूप से रंगों की श्रेणी को संख्याओं के टुपल्स के रूप में वर्णित करता है।
प्रत्येक रंग के लिए जाने के बजाय, हम सबसे आम रंग-स्थान पर चर्चा करेंगे जिसका हम उपयोग करते हैं। आरजीबी (लाल, हरा, नीला) और एचएसवी (ह्यू, संतृप्ति, मान)।
आरजीबी मूल रूप से रंग को तीन घटकों के टपल के रूप में वर्णित करता है। प्रत्येक घटक 0 और 255 के बीच मान ले सकता है, जहां टपल (0, 0, 0) काले रंग का प्रतिनिधित्व करता है और (255, 255, 255) सफेद का प्रतिनिधित्व करता है। उदाहरण के लिए, अगर हम स्क्रीन पर एक शुद्ध नीला पिक्सेल दिखाना चाहते हैं, तो R मान 0 होगा, G मान 0 होगा और B मान 255 होगा।
RGB में रंगों के कुछ और उदाहरण नीचे दिए गए हैं:
रंग | RGB मान |
---|---|
लाल | 255, 0, 0 |
ऑरेंज | 255, 128, 0 |
गुलाबी | 255, 153, 255 |
HSV के साथ, एक पिक्सेल को 3 मापदंडों द्वारा भी दर्शाया जाता है, लेकिन इसके बजाय यह ह्यू, संतृप्ति और मान है। हालांकि, आरजीबी के विपरीत, एचएसवी एक पिक्सेल का प्रतिनिधित्व करने के लिए प्राथमिक रंग का उपयोग नहीं करता है। इसके बजाय, यह रंग का उपयोग करता है, जो कि पिक्सेल का रंग या छाया है।
संतृप्ति रंग की तीव्रता है, जहां 0 की संतृप्ति 0 का प्रतिनिधित्व करती है और 255 की संतृप्ति अधिकतम तीव्रता है। मान बताएगा कि रंग कितना उज्ज्वल या गहरा है।
सही रंग का पता लगाना
तो चलिए सबसे पहले उस इमेज को डाउनलोड करते हैं जिसके साथ हम काम करेंगे,
अब जब हमें रंगों की छवि मिल गई है, तो हम मज़ेदार भाग शुरू कर सकते हैं। बस अपना पसंदीदा पायथन टेक्स्ट एडिटर या आईडीई खोलें और चलिए शुरू करते हैं।
import cv2 import numpy as np import imutils img = cv2.imread('color2.jpg')
कोड की उपरोक्त पंक्ति में, पहली दो पंक्तियाँ सभी आयातों को संभालती हैं। तीसरी पंक्ति में, मैं इम्यूटिल्स मॉड्यूल आयात कर रहा हूं, जो छवियों का आकार बदलने और रंगों की सीमा खोजने में मदद करता है। पंक्ति 4 में हमने चित्र को खोल दिया है।
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
अब हमने इमेज को hsv इमेज में बदल दिया है क्योंकि hsv तीव्रता को रंग से अलग करने में मदद करता है।
lower_range = np.array([110,50,50]) upper_range = np.array([130,255,255])
अब हम नीले रंग की ऊपरी और निचली सीमा को परिभाषित करते हैं जिसका हम पता लगाना चाहते हैं। इन सीमाओं को खोजने के लिए हम imutils लाइब्रेरी में रेंज-डिटेक्टर स्क्रिप्ट का उपयोग कर सकते हैं। हम इन मानों को एक NumPy सरणी में रखते हैं।
mask = cv2.inRange(hsv, lower_range, upper_range)
यहां हम वास्तव में निर्दिष्ट नीले रंग के साथ एक मुखौटा बना रहे हैं। मुखौटा केवल छवि के एक विशिष्ट भाग का प्रतिनिधित्व करता है। इस मामले में, हम hsv छवि के माध्यम से जाँच कर रहे हैं, और उन रंगों की जाँच कर रहे हैं जो निम्न-श्रेणी और ऊपरी-श्रेणी के बीच हैं। मेल खाने वाले क्षेत्र एक छवि को मुखौटा चर पर सेट करेंगे।
cv2.imshow('image', img) cv2.imshow('mask', mask) while(True): k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()
अंत में, हम अंतर देखने के लिए मूल और मुखौटा छवि को साथ-साथ दिखा सकते हैं। यदि आप यह समझना चाहते हैं कि कोड में 0xFF का क्या अर्थ है, तो इसे पढ़ें। कोड तब उपयोगकर्ता के 'Esc' बटन को हिट करने की प्रतीक्षा करता है जो इसे छोड़ देगा और सफाई के लिए सभी विंडो को नष्ट कर देगा।
अंतिम कार्यक्रम
import cv2 import numpy as np import imutils img = cv2.imread('color2.jpg') hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) lower_range = np.array([110,50,50]) upper_range = np.array([130,255,255]) mask = cv2.inRange(hsv, lower_range, upper_range) cv2.imshow('image', img) cv2.imshow('mask', mask) while(True): k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()
आउटपुट
ऊपर, हम देखते हैं कि मुखौटे में काले धब्बे के जोड़े हैं, वह है शोर।