- चित्र क्या हैं?
- कंप्यूटर छवियों को कैसे संग्रहीत करता है
- छवियों की पहचान करना मशीन के लिए क्यों मुश्किल है
- OpenCV के अनुप्रयोग और उपयोग
- पायथन और एनाकोंडा के साथ ओपनसीवी स्थापित करना
- OpenCV में छवियों को खोलना और सहेजना
- OpenCV में ग्रे स्केलिंग छवि
- रंग स्थान
- आरजीबी छवि के व्यक्तिगत घटकों की खोज
- छवि को अलग-अलग RGB घटक में परिवर्तित करना
- छवि का हिस्टोग्राम प्रतिनिधित्व
- OpenCV का उपयोग करके चित्र और आकृतियाँ बनाना
कला देखने का एक तरीका है, और वे कहते हैं कि देखने पर विश्वास है, लेकिन विपरीत भी सच है, विश्वास देख रहा है और यह वास्तव में दृष्टि के उपहार के बिना इस दुनिया में रहने की कल्पना करना कठिन है - हमारी आँखें, कितना अद्भुत है यह एक शिशु हो रहा है जब हमारी आंखें खुलती हैं तो हम दुनिया को देखते हैं और अपने आस-पास की दुनिया को पहचानने और देखने लगते हैं लेकिन जैसे-जैसे समय बीतता है, वैसे ही अद्भुत अनुभव एक सांसारिक बन जाता है। लेकिन जैसे-जैसे हम तकनीक के साथ आगे बढ़ रहे हैं, हम एक ऐसे मुकाम पर हैं जहाँ मशीनें भी इसे देख और समझ पा रही हैं। वर्तमान में, यह एक विज्ञान-फाई प्रतीत नहीं होता है यदि आप सिर्फ अपने फोन को अपने चेहरे से अनलॉक करते हैं, लेकिन मशीन दृष्टि के विकास की कहानी 20 साल से अधिक समय पहले की है।
इस क्षेत्र में प्रारंभिक औपचारिक कदम 1999 में एक इंटेल पहल में वापस ले लिया गया था, जब ओपेन सीवी (ओपन सोर्स कंप्यूटर विज़न) के तहत सभी शोध चल रहे थे , जो मूल रूप से C ++ में लिखा गया था, 2006 में इसकी पहली बड़ी रिलीज 1.0 के साथ। 2009 में, 2015 में तीसरा और अब 2018 में चौथा। अब OpenCV में C ++, पायथन और जावा इंटरफेस है और विंडोज, लिनक्स, मैक ओएस, आईओएस और एंड्रॉइड को सपोर्ट करता है। तो यह आसानी से अजगर और लिनक्स वातावरण के साथ रास्पबेरी पाई में स्थापित किया जा सकता है। और OpenCV और संलग्न कैमरे के साथ रास्पबेरी पाई का उपयोग कई वास्तविक समय छवि प्रसंस्करण अनुप्रयोगों जैसे फेस डिटेक्शन, फेस लॉक, ऑब्जेक्ट ट्रैकिंग, कार नंबर प्लेट डिटेक्शन, होम सिक्योरिटी सिस्टम आदि बनाने के लिए किया जा सकता है।
OpenCV का उपयोग करके इमेज प्रोसेसिंग सीखने में जाने से पहले यह जानना महत्वपूर्ण है कि चित्र क्या हैं और मनुष्य और मशीनें उन छवियों को कैसे देखते हैं।
चित्र क्या हैं?
छवियां दृश्यमान प्रकाश स्पेक्ट्रम का द्वि-आयामी प्रतिनिधित्व हैं। और दृश्यमान प्रकाश स्पेक्ट्रम विद्युत चुम्बकीय स्पेक्ट्रम का सिर्फ एक हिस्सा है जो अवरक्त और पराबैंगनी स्पेक्ट्रम के बीच स्थित है।
चित्र कैसे बनते हैं: - जब एक प्रकाश एक फिल्म, एक सेंसर या रेटिना पर एक वस्तु को दर्शाता है।
यह है कि हमारी आंखें कैसे काम करती हैं, एक छोटे से उद्घाटन को छोड़ते हुए रोशनी के सबसे अधिक बिंदु को अवरुद्ध करने के लिए एक बाधा का उपयोग करते हुए, जिसके माध्यम से प्रकाश इसे पारित कर सकता है जिसे एपर्चर कहा जाता है, और यह एक बहुत ही केंद्रित छवि बनाता है और एक पिन होल कैमरा के लिए एक कार्यशील मॉडल है लेकिन पिन छेद कैमरे में एक समस्या है, कि प्रकाश की एक ही राशि एपर्चर में प्रवेश करेगी, जो फिल्म या छवि के लिए उपयुक्त नहीं हो सकती है, हम एक केंद्रित छवि प्राप्त नहीं कर सकते हैं, ताकि हम जिस छवि पर ध्यान केंद्रित कर सकें आगे और पीछे फिल्म को स्थानांतरित करने की आवश्यकता है, लेकिन यह कई स्थितियों में समस्याग्रस्त है।
या फिर हम लेंस का उपयोग करके इस समस्या को ठीक कर सकते हैं, यह हमें एपर्चर आकार को नियंत्रित करने की अनुमति देता है, और फोटोग्राफी में के रूप में च इसके नाम से जाना जाता बंद करो, आम तौर पर की च मूल्य कम बंद करो फोटोग्राफी में बेहतर है।
एपर्चर का आकार हमें फोटोग्राफी में बोकेह नामक क्षेत्र की अच्छी गहराई में ले जाने देता है, यह हमें एक धुंधली पृष्ठभूमि की अनुमति देता है जबकि हम छवि पर ध्यान केंद्रित करते हैं।
कंप्यूटर छवियों को कैसे संग्रहीत करता है
आपने विभिन्न इमेज फॉर्मेट जैसे.png,.jpgG और आदि के बारे में सुना होगा। ये सभी हमारे एनालॉग वर्ल्ड का डिजिटल प्रतिनिधित्व करते हैं। कंप्यूटर इमेज को स्टोरेज के लिए डिजिटल कोड में ट्रांसलेट करके करते हैं और फिर फाइल को इमेज के लिए वापस व्याख्या करते हैं। प्रदर्शित करें। लेकिन मूल में वे छवियों को संग्रहीत करने के लिए एक सामान्य मंच का उपयोग करते हैं, और ओपनसीवी के लिए भी यही सच है।
OpenCV अपनी छवियों के लिए डिफ़ॉल्ट रूप से RGB (लाल, हरा और नीला) रंग स्थान का उपयोग करता है, जहां प्रत्येक पिक्सेल समन्वय (x, y) में 8-बिट फॉर्म (0-255, 2 8) में तीव्रता के लिए 3 मान होते हैं ।
प्रत्येक रंग की विभिन्न तीव्रता को मिलाकर हमें पूर्ण स्पेक्ट्रम मिलता है, इसीलिए चित्रकला या कला में इन तीन रंगों को प्राथमिक रंग और अन्य सभी को द्वितीयक माना जाता है, क्योंकि अधिकांश माध्यमिक रंग प्राथमिक रंगों द्वारा बनाए जा सकते हैं। पीले रंग की तरह, हमारे पास निम्नलिखित मूल्य हैं: लाल - 255; हरा - 255; नीला - ०।
अब छवियों को बहुआयामी सरणियों में संग्रहीत किया जाता है । प्रोग्रामिंग में, सरणी वस्तुओं के संग्रह की एक श्रृंखला है। और यहां हम तीन प्रकार के सरणियों से निपटते हैं 1 डी, 2 डी और 3 डी जहां 'डी' आयामी के लिए खड़ा है।
रंगीन छवियों को तीन आयामी सरणियों में संग्रहीत किया जाता है, जहां तीसरा आयाम RGB रंग (जो हम बाद में देखेंगे) का प्रतिनिधित्व करते हैं, और साथ में वे एक छवि के लिए पिक्सेल की विभिन्न तीव्रता बनाते हैं, जबकि काले और सफेद चित्र दो आयामी सरणियों में संग्रहीत होते हैं। और यह भी दो प्रकार की काली और सफेद छवियां हैं ग्रेस्केल और बाइनरी छवियां।
ग्रेस्केल छवियां एक दो आयामी सरणी के रंगों के रंगों से बनती हैं, जबकि द्विआधारी छवियां पिक्सेल या तो काले या सफेद रंग की होती हैं।
छवियों की पहचान करना मशीन के लिए क्यों मुश्किल है
कंप्यूटर दृष्टि अपने आप में एक चुनौतीपूर्ण कार्य है, आप खुद सोच सकते हैं कि किसी मशीन को दृष्टि, मान्यता और पहचान देने में कितना मुश्किल है। निम्नलिखित कारक हैं जो कंप्यूटर विज़न को इतना कठिन बनाते हैं।
- कैमरा सेंसर और लेंस सीमाएँ
- बिंदु भिन्नता देखें
- प्रकाश व्यवस्था बदलना
- स्केलिंग
- अवरोध
- वस्तु वर्ग भिन्नता
- अस्पष्ट छवियाँ / ऑप्टिकल भ्रम
OpenCV के अनुप्रयोग और उपयोग
कठिनाई के बावजूद, कंप्यूटर विजन के पास कई सफलता की कहानियां हैं
- रोबोटिक नेविगेशन - सेल्फ ड्राइविंग कार
- चेहरा पहचान और पहचान
- खोज इंजन छवि खोज
- लाइसेंस प्लेट पढ़ना
- हस्तलिपि अभिज्ञान
- स्नैपचैट और फेस फिल्टर
- वस्तु मान्यता
- खेल में बॉल एंड प्लेयर ट्रैकिंग
- और बहुत सारे!
पायथन और एनाकोंडा के साथ ओपनसीवी स्थापित करना
OpenCV C ++ में लिखा गया है, लेकिन इसे C ++ के साथ लागू करना बहुत कठिन है और इसलिए हम इसे उच्च स्तर की भाषा के साथ अजगर के रूप में लागू करना चुनते हैं, और अजगर के साथ OpenCV को लागू करने के अतिरिक्त लाभ भी हैं क्योंकि पायथन सबसे आसान भाषाओं में से एक है शुरुआती लोगों के लिए भी यह डेटा विज्ञान और मशीन सीखने के अनुप्रयोगों के लिए बेहद शक्तिशाली है और यह उन चित्रों को भी सुस्पष्ट सरणियों में संग्रहीत करता है जो हमें कुछ बहुत शक्तिशाली कार्यों को आसानी से करने की अनुमति देते हैं।
बेसिक प्रोग्रामिंग हाई स्कूल लेवल मैथ के एक्सपोजर के साथ उपयोगी है, एक वेबकैम, पायथन 2.7 या 3.6 (एनाकोंडा पैकेज पसंद किया जाता है)।
चरण 1. एनाकोंडा पायथन पैकेज डाउनलोड और इंस्टॉल करें
इसके लिए जाएं: https://www.anaconda.com/download और अपनी मशीन मौसम के अनुसार इसकी खिड़कियां, लिनक्स या मैक चुनें और आप 64 बिट सिस्टम या 32 बिट सिस्टम के लिए अजगर 2.7 या अजगर 3.7 संस्करण का चयन कर सकते हैं, लेकिन अब एक दिन में अधिकांश प्रणाली 64 बिट की होती है।
अजगर का एनाकोंडा वितरण स्पाइडर स्टूडियो, ज्यूपिटर नोटबुक और एनाकोंडा प्रांप्ट के साथ आता है, जो कि अजगर को उपयोग करने के लिए सुपर अनुकूल बनाता है। हम उदाहरण के लिए जासूसी स्टूडियो का उपयोग करेंगे।
अजगर 2.7 या 3.7 के बीच चुनाव पूरी तरह से तटस्थ है, लेकिन उदाहरणों के लिए हम अजगर 3.7 का उपयोग कर रहे हैं क्योंकि यह अजगर का भविष्य है और अजगर 2.7 फार्म 2020 पर ले जाएगा, अधिकांश पुस्तकालयों को अजगर 3.7 में भी विकसित किया जा रहा है मन में अजगर के भविष्य के पहलू। इसके अलावा यह बुनियादी गणितीय कार्यों जैसे (2/5 = 2.5) पर अपेक्षित परिणाम देता है, जबकि अजगर 2.7 इसका मूल्यांकन करेगा 2. इसके अलावा अजगर 3.7 (प्रिंट ("हैलो")) में एक फ़ंक्शन के रूप में माना जाता है, इसलिए यह प्रोग्रामर्स को हाथों-हाथ देता है।
चरण 2. OpenCV के साथ एक आभासी मंच बनाना
हम एनाकोंडा प्रॉम्प्ट और यहां अपलोड की गई YML फ़ाइल का उपयोग करके स्पाइडर के लिए एक वर्चुअल प्लेटफॉर्म बनाकर OpenCV स्थापित करने जा रहे हैं।
YML फ़ाइलों के साथ हम उन सभी पैकेजों और पुस्तकालयों को स्थापित करेंगे जिनकी आवश्यकता होगी, लेकिन हालाँकि यदि आप किसी भी अतिरिक्त पैकेजों को स्थापित करना चाहते हैं तो आप आसानी से एनाकोंडा प्रांप्ट के माध्यम से उस पैकेज की कमांड चलाकर स्थापित कर सकते हैं।
अपनी खिड़कियों के खोज आइकन पर जाएं और एनाकोंडा प्रॉम्प्ट टर्मिनल खोजें, आप इसे अपने एनाकोंडा फ़ोल्डर के अंदर पा सकते हैं जिसे आपने अभी स्थापित किया है।
फिर आपको अपनी डाउनलोड की गई YML फ़ाइल को ढूंढना होगा, और यहाँ से आपके पास दो विकल्प हैं या तो अपने टर्मिनल की निर्देशिका को उस स्थान पर बदलना जहाँ आपकी YML फ़ाइल डाउनलोड की गई है या या तो अपनी YML फ़ाइल को उस निर्देशिका में कॉपी करें जहाँ आपकी एनाकोंडा अधिकांश में स्थापित है ऐसे मामलों में यह C: \ ड्राइव के अंदर होगा, अपनी YML फ़ाइल को निर्दिष्ट स्थान पर कॉपी करने के बाद अपने प्रॉम्प्ट पर निम्न कमांड रन करें
conda env create -f virtual_platform_windows.yml
चूँकि मेरा सिस्टम YML फाइल पर विंडोज़ पर चल रहा है और कमांड विंडोज़ से मेल खाती है, हालाँकि आप अपने सिस्टम के अनुसार लिनक्स या मैक द्वारा विंडोज़ को बदलकर संशोधित कर सकते हैं।
नोट: - यदि संकुल निष्कर्षण त्रुटि देता है तो पहले pytorch और numpy स्थापित करें और फिर उपरोक्त कमांड चलाएँ।
अब एनाकोंडा नाविक को खोजें और वहां "एप्लीकेशन ऑन ___" का एक ड्रॉप डाउन मेनू होगा और वहां से वर्चुअल वातावरण का चयन करें और फिर वहां से आपको स्पाइडर स्टूडियो लॉन्च करना होगा ।
और यह बात है, आप आरंभ करने के लिए तैयार हैं!
OpenCV में छवियों को खोलना और सहेजना
यहां हम कुछ बुनियादी आदेशों और शब्दावली को ओपनसीवी में पायथन का उपयोग करने के लिए समझा रहे हैं। हम OpenCV में तीन बुनियादी कार्यों के बारे में सीखेंगे imread, imshow और imwrite।
# अजगर में # चिन्ह # प्रतीक द्वारा दिए गए हैं
आदेश द्वारा अजगर में आयात opencv
आयात cv2
छवि को पथ निर्दिष्ट करते हुए 'इम्रेड' का उपयोग करके एक छवि लोड करें
छवि = cv2.imread ('input.jpg')
अब उस छवि को अजगर में लोड और संग्रहित किया जाता है जिसे हम छवि के रूप में नामित करते हैं
अब अपनी छवि चर प्रदर्शित करने के लिए, हम 'imshow' का उपयोग करते हैं और imshow फ़ंक्शन के लिए पहला पैरामीटर छवि विंडो पर दिखाया गया शीर्षक है, और इसे स्ट्रिंग के रूप में नाम का प्रतिनिधित्व करने के लिए ('') में दर्ज करना होगा।
cv2.imshow ('हैलो वर्ल्ड', छवि)
वेटकी हमें जानकारी की इनपुट करने की अनुमति देता है जब छवि विंडो खुली होती है, तो इसे खाली छोड़ने से यह जारी रखने से पहले किसी भी प्रकार के दबाए जाने की प्रतीक्षा करता है, संख्याओं को छोड़कर (0 को छोड़कर), हम एक देरी को निर्दिष्ट कर सकते हैं कि आप कितनी देर तक खिड़की खुली रखते हैं (समय यहाँ मिलीसेकंड में)।
cv2.waitKey ()
'विध्वंस' विंडोज सभी खुली खिड़कियों को बंद कर देता है, इसे लगाने में विफलता आपके कार्यक्रम को लटका देगी।
cv2.destroyAllWindows ()
, इसके लिए हम numpy का उपयोग करेंगे, numpy बड़े बहुआयामी सरणियों और मैट्रिस के लिए समर्थन जोड़ने के लिए अजगर प्रोग्रामिंग के लिए एक पुस्तकालय है।
आयात CV2 #importing numpy आयात numpy एनपी के रूप में छवि = cv2.imread ('input.jpg') cv2.imshow ('hello_world', छवि) #shape समारोह बहुत उपयोगी है जब हम देख रहे हैं एक आयाम एक सरणी की है, यह एक tuple लौटाता है जो एक इमेज प्रिंट (image.shape) cv2.waitKey () cv2.destroyAllWindows () का एक आयाम देता है
कंसोल आउटपुट - (183, 275, 3), छवि के दो आयाम ऊंचाई में 183 पिक्सेल और चौड़ाई में 275 पिक्सेल हैं और 3 का अर्थ है कि तीन अन्य घटक हैं (आर, जी, बी) जो इस छवि को बनाता है (यह दिखाता है कि रंगीन छवियों को तीन आयामी सरणियों में संग्रहीत किया जाता है)।
प्रिंट ('छवि की ऊँचाई:', (छवि.शाप, 'पिक्सेल')) प्रिंट ('छवि की चौड़ाई:', (छवि.शाप, 'पिक्सेल'))
कंसोल आउटपुट - छवि की ऊँचाई: (183, 'पिक्सेल')
छवि की चौड़ाई: (275, 'पिक्सेल')
OpenCV में संपादित छवि को सहेजना
फ़ाइल नाम और छवि को सहेजने के लिए हम 'imwrite' का उपयोग करते हैं।
cv2.imwrite ('output.jpg', छवि) cv2.imwrite ('output.png', चित्र)
पहला तर्क उस फ़ाइल का नाम है जिसे हम सहेजना चाहते हैं, {पढ़ने के लिए या उस फ़ाइल को सहेजने के लिए जिसे हम ()’) स्ट्रिंग के रूप में इंगित करने के लिए उपयोग करते हैं} और दूसरा तर्क फ़ाइल नाम है।
OpenCV आपको विभिन्न स्वरूपों में छवि को सहेजने की अनुमति देता है।
OpenCV में ग्रे स्केलिंग छवि
ग्रेसीकलिंग वह प्रक्रिया है जिसके द्वारा एक छवि को पूर्ण रंग से धूसर (काले और सफेद) रंगों में परिवर्तित किया जाता है।
Opencv में, कई कार्य प्रसंस्करण से पहले छवियों को greyscales करते हैं। ऐसा इसलिए किया जाता है क्योंकि यह छवि को सरल बनाता है, लगभग एक शोर में कमी के रूप में कार्य करता है और प्रसंस्करण समय को बढ़ाता है क्योंकि छवि में कम जानकारी होती है (जैसा कि ग्रेसीकेल छवियों को दो आयामी सरणियों में संग्रहीत किया जाता है)।
आयात cv2 # हमारी इनपुट छवि लोड करें = cv2.imread ('input.jpg') cv2.imshow ('मूल', छवि) cv2.waitKey () #we cvtcolor का उपयोग, greyscale ग्रे_image = cv2.cvtColor (चित्र ) में बदलने के लिए करें।, cv2.COLOR_BGR2GRAY) cv2.imshow ('ग्रेस्केल', ग्रे_इमेज) cv2.waitKey () cv2.destroyALLWindows ()
छवि को ग्रेस्केल में बदलने का सरल तरीका सिर्फ छवि के नाम पर एक ओर के फ़ंक्शन में तर्क 0 को जोड़ना है
आयात cv2 grey_image = cv2.imread ('input.jpg', 0) cv2.imshow ('grayscale', grey_image) cv2.waitKey () cv2.destroyAllWindows ()
आयात CV2 एनपी के रूप में आयात numpy छवि = cv2.imread ('input.jpg') प्रिंट (image.shape) cv2.imshow ('मूल', छवि) cv2.waitKey () gray_image = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY) cv2.imshow ('ग्रेस्केल', ग्रे_इमेज) प्रिंट (ग्रे_image.shape) cv2.waitKey () cv2.destroyALLWindows ()
कंसोल आउटपुट: - (183, 275, 3) - रंगीन छवि के लिए
(183, 275) - ग्रेस्केल छवि के लिए
इसलिए यह स्पष्ट रूप से दर्शाता है कि रंगीन छवियों को तीन आयामी सरणियों द्वारा दर्शाया गया है, जबकि दो आयामी सरणियों द्वारा ग्रे स्केल चित्र।
रंग स्थान
रंग रिक्त स्थान वे तरीके हैं, जिनसे चित्र संग्रहीत किए जाते हैं। RGB, HSV, CMYK अलग-अलग रंग के स्थान हैं, ये रंग का प्रतिनिधित्व करने के लिए बस सरल तरीके हैं।
आरजीबी - लाल, हरा और नीला।
एचएसवी - ह्यू, संतृप्ति और मूल्य।
और CMYK आमतौर पर इंकजेट प्रिंटर में उपयोग किया जाता है।
RGB या BGR रंग स्थान
OpenCV का डिफ़ॉल्ट रंग स्थान RGB है। RGB एक एडिटिव कलर मॉडल है जो विभिन्न इंटेंसिटी / ब्राइटनेस के ब्लू, ग्रीन और रेड कलर को मिलाकर कलर जेनरेट करता है। OpenCV में हम 8 बिट कलर डेप्थ का उपयोग करते हैं।
- रेड (0-255)
- नीला (0-255)
- हरा (0-255)
हालांकि OpenCV वास्तव में BGR प्रारूप में रंग संग्रहीत करता है ।
मजेदार तथ्य: - हम कंप्यूटर में BGR ऑर्डर का उपयोग करते हैं, क्योंकि 32-बिट पूर्णांक मेमोरी में कैसे संग्रहीत किए जाते हैं, यह अभी भी आरजीबी के रूप में संग्रहीत किया जा रहा है। एक रंग का प्रतिनिधित्व करने वाला पूर्णांक जैसे: - 0X00BBGGRR को 0XRRGGBB के रूप में संग्रहीत किया जाएगा।
एचएसवी रंग अंतरिक्षएचएसवी (ह्यू, संतृप्ति और मूल्य / चमक) एक रंग स्थान है जो उन रंगों का प्रतिनिधित्व करने का प्रयास करता है जो मनुष्य इसे अनुभव करते हैं। यह आरजीबी रंग बिंदुओं के एक बेलनाकार प्रतिनिधित्व में रंग जानकारी संग्रहीत करता है।
रंग - रंग मूल्य (0-179)
संतृप्ति - रंग की जीवंतता (0-255)
मूल्य - चमक या तीव्रता (0-255)
एचएसवी रंग अंतरिक्ष प्रारूप रंग विभाजन में उपयोगी है। RGB में, विशिष्ट रंग को फ़िल्टर करना आसान नहीं है, हालांकि HSV विशिष्ट रंग को फ़िल्टर करने के लिए रंगीन रेंज सेट करना बहुत आसान बनाता है जैसा कि हम उन्हें समझते हैं।
ह्यू एचएसवी में रंग का प्रतिनिधित्व करता है, ह्यू मूल्य 0 - 180 से है और 360 नहीं है इसलिए यह पूर्ण सर्कल को पूरा नहीं कर रहा है और इसलिए इसे मानक से अलग मैप किया गया है।
रंग रेंज फिल्टर
- लाल - (165-15)
- हरा - (45-75)
- नीला - (90-120)
जैसा कि हम जानते हैं कि RGB (रेड, ग्रीन और ब्लू) कलर स्पेस में स्टोर की जा रही है और इसलिए OpenCV हमें वही दिखाता है, लेकिन opencv के RGB फॉर्मेट के बारे में याद रखने वाली पहली बात यह है कि यह वास्तव में BGR है और हम इसे देखकर जान सकते हैं छवि आकार।
आयात cv2 एनपी छवि के रूप में सुन्न आयात = cv2.imread ('input.jpg') # B, G, R मान पहले 0,0 पिक्सेल B, G, R = छवि प्रिंट (B, G, R) प्रिंट (छवि ) .shape) #now अगर हम ग्रेस्केल छवि पर इस पर लागू gray_img = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY) प्रिंट (gray_img.shape) 10,50 पिक्सेल के लिए #gray_image पिक्सेल मूल्य gray_img प्रिंट ()
कंसोल आउटपुट: प्रिंट (बी, जी, आर) - 6 11 10
प्रिंट (छवि.शाप) - (१,३, २pe५ , ३)
प्रिंट (ग्रे_इम.शैप) - (१ gray३, २g५ )
प्रिंट (ग्रे_इमजी) - ६ ९
अब ग्रे स्केल छवि में केवल दो आयाम हैं, क्योंकि हमें याद है कि रंग छवि तीन आयामों में संग्रहीत है, तीसरा आयाम है (आर, जी, बी) जबकि ग्रेस्केल में केवल दो आयाम मौजूद हैं, क्योंकि (आर, जी), बी) अनुपस्थित है और एक विशेष पिक्सेल स्थिति के लिए हमें केवल एक ही मूल्य मिलता है जबकि रंगीन छवि में हमें तीन मान मिले।
एक अन्य उपयोगी रंग अंतरिक्ष एचएसवी है
import cv2 image = cv2.imread ('input.jpg') hsv_image = cv2.cvtColor (छवि, cv2.COLOR_BGR2HSV) cv2.imshow ('HSV image', hsv_image) cv2.imshow ('hue चैनल') । imshow ('संतृप्ति चैनल', hsv_image) cv2.imshow ('मूल्य चैनल', hsv_image) cv2.waitKey () cv2.destroyAllWindows ()
कोड चलाने के बाद आप चार छवियों को देख सकते हैं जिनमें से तीन व्यक्तिगत चैनलों की हैं और एक संयुक्त एचएसवी छवि है।
ह्यू चैनल की छवि काफी गहरी है क्योंकि इसका मूल्य केवल 0 से 180 तक भिन्न होता है।
इसके अलावा, ध्यान दें कि imshow फ़ंक्शन आपको RGB या BGR छवि दिखाने की कोशिश करता है, लेकिन HSV रूपांतरण इसे ओवरलैप करता है।
इसके अलावा, मूल्य चैनल इसकी चमक के कारण छवि के ग्रेस्केल के समान होगा।
आरजीबी छवि के व्यक्तिगत घटकों की खोज
आयात cv2 छवि = cv2.imread ('input.jpg') # opencv का विभाजन कार्य प्रत्येक रंग सूचकांक B, G, R = cv2.split (छवि) cv2.imshow ("रेड", R) cv2.imshow ( ) को विभाजित करता है "ग्रीन", G) cv2.imshow ("ब्लू", B) # अलग-अलग रंग घटकों को मर्ज करके मूल छवि को #making करते हुए = cv2.merge () cv2.imshow ("मर्ज किया गया", विलय) # नीला रंग मर्ज किए गए = cv2.merge () cv2.imshow ("नीले प्रवर्धन के साथ विलय", विलय) व्यक्तिगत रंग घटकों के आकार को प्रस्तुत करना। # आउटपुट वुल्ड केवल दो आयाम वाला होगा जो ऊंचाई और चौड़ाई, क्योंकि RGB घटक का तीसरा तत्व व्यक्तिगत रूप से प्रिंट (B.shape) प्रिंट (R ) का प्रतिनिधित्व करता है ।आकार) प्रिंट (जी.शाप) cv2.waitKey (0) cv2.destroyAllWindows ()
कंसोल आउटपुट: आकृति फ़ंक्शन से छवि के # आयाम
(183, 275)
(183, 275)
(183, 275)
छवि को अलग-अलग RGB घटक में परिवर्तित करना
नीचे दिए गए कोड में हमने छवि HxW के आयामों के साथ शून्य का एक मैट्रिक्स बनाया है, शून्य एक सरणी को शून्य से भरता है लेकिन उसी आयाम के साथ।
आकार समारोह बहुत उपयोगी है जब हम एक छवि के आयाम को देख रहे हैं, और यहाँ हम उस आकृति समारोह का टुकड़ा करने की क्रिया किया है। इसलिए आकार निर्दिष्ट बिंदुओं तक सब कुछ पकड़ लेता है यानी दूसरे निर्दिष्ट बिंदुओं तक जो छवि की ऊंचाई और चौड़ाई होगी क्योंकि तीसरा छवि के आरजीबी घटक का प्रतिनिधित्व करता है और हमें यहां इसकी आवश्यकता नहीं है।
आयात cv2 आयात np छवि = cv2.imread ('input.jpg') B, G, R = cv2.split (छवि) zeros = np.zeros (image.shape, dtype = "uint8") cv2.imshow ("RED", cv2.merge ()) cv2.imshow ("ग्रीन", cv2.merge ()) cv2.imshow ("ब्लू", cv2.merge ()) cv2.waitKey (0) cv2.destroyAllWindows ())
छवि का हिस्टोग्राम प्रतिनिधित्व
छवि का हिस्टोग्राम प्रतिनिधित्व छवियों के घटकों की कल्पना करने की विधि है ।
निम्नलिखित कोड आपको अपने संयुक्त और व्यक्तिगत रंग घटकों के रंग हिस्टोग्राम के माध्यम से छवि का विश्लेषण करने देता है।
आयात CV2 एनपी के रूप में आयात numpy आयात matplotlib के लिए # हम जरूरत हिस्टोग्राम भूखंडों बनाने के लिए plt रूप matplotlib.pyplot आयात छवि = cv2.imread ('input.jpg') हिस्टोग्राम = cv2.calcHist (,, कोई नहीं,,) # हम भूखंड एक हिस्टोग्राम, रवेल () हमारी छवि सरणी plt.hist (image.ravel (), 256,) plt.show () #viewing अलग रंग चैनलों के रंग = ('b', 'g', 'r') # को जानता है रंग अलग करें और प्रत्येक के लिए हिस्टोग्राम में प्लॉट करें , enumerate (colour) में col: histogram2 = cv2.calcHist ((, कोई नहीं,), plt.plot (histogram2, color = colt ) plt.xlim () plt.show ()
आइए इसके प्रत्येक व्यक्तिगत मापदंडों के साथ कैल्शिस्ट फ़ंक्शन को समझते हैं
cv2.calcHist (चित्र, चैनल, मुखौटा, हिस्टीज़ , पर्वतमाला)
चित्र: इसकी प्रकार की छवि uint 8 या फ्लोट 32 की स्रोत है। इसे वर्गाकार कोष्ठक में दिया जाना चाहिए, अर्थात "", जो कि इसके दूसरे स्तर के व्यूह को इंगित करता है क्योंकि opencv के लिए चित्र किसी सरणी रूप में डेटा है।
चैनल: यह वर्ग कोष्ठक में भी दिया गया है। यह चैनल का सूचकांक है जिसके लिए हम हिस्टोग्राम को शांत करते हैं, उदाहरण के लिए यदि इनपुट ग्रेस्केल छवि है, तो इसका मूल्य है, आप जो रंग छवियां पास कर सकते हैं, या क्रमशः नीले, हरे और लाल चैनल के हिस्टोग्राम की गणना कर सकते हैं।
मुखौटा: मुखौटा छवि। पूर्ण छवि के हिस्टोग्राम को खोजने के लिए, इसे "कोई नहीं" के रूप में दिया गया है। लेकिन यदि आप छवि के विशेष क्षेत्र का हिस्टोग्राम ढूंढना चाहते हैं, तो आपको उसके लिए एक मुखौटा छवि बनानी होगी और उसे मास्क के रूप में देना होगा।
Histize: यह हमारे BIN काउंट का प्रतिनिधित्व करता है। पूर्ण पैमाने पर हम पास होने के लिए वर्ग कोष्ठक में दिए जाने की आवश्यकता है।
रंग: यह हमारी सीमा है, सामान्य रूप से है
OpenCV का उपयोग करके चित्र और आकृतियाँ बनाना
नीचे OpenCV में रेखाएँ, आयत, बहुभुज, वृत्त आदि के कुछ उदाहरण दिए गए हैं ।
आयात cv2 आयात np # np #creating के रूप में काला वर्ग = np.zeros ((512,512,3), np.uint8) #we भी काले और सफेद रंग में बना सकता है, हालाँकि इसमें कोई भी image_bw = np.zeros नहीं होगा ((512,512), np.uint8) cv2.imshow ("ब्लैक रेक्टेंगल (रंग)", छवि) cv2.imshow ("ब्लैक रेक्टेंगल (B & W)", image_bw)
लाइन
# काले वर्ग पर एक पंक्ति बनाएँ # cv2.line (छवि, निर्देशांक शुरू करना, निर्देशांक, रंग, मोटाई को पूरा करना) # मोटाई की एक विकर्ण रेखा 5 पिक्सेल छवि = np.zeros ((512,512,3), np.uint8) cv2.line (छवि, (0,0), (511,511), (255,127,0), 5) cv2.imshow ("नीली रेखा", छवि)
आयत
# काले वर्ग पर एक आयत बनाएँ # cv2.rectangle (छवि, निर्देशांक शुरू करना, निर्देशांक, रंग, मोटाई) # 5 पिक्सेल छवि की एक आयत निकालना = np.zeros ((512,512,3), np.uint8) cv2.ट्रैंगल (छवि, (30,50), (100,150), (255,127,0), 5) cv2.imshow ("आयत", छवि)
# काले वर्ग पर एक वृत्त का निर्माण # cv2.circle (छवि, केंद्र, त्रिज्या, रंग, भरण) छवि = np.zeros ((512,512,3), np.uint8) cv2.circle (छवि, (100,100),) 50), (255,127,0), - 1) cv2.imshow ("सर्कल", छवि)
# पॉलीगॉन छवि बनाना = np.zeros ((512,512,3), np.uint8) #lets चार बिंदुओं pts = np.array (,,, np.int32) को परिभाषित करते हैं #lets आवश्यक रूप से हमारे बिंदुओं को फिर से सेट करते हैं polylines pts = pts.reshape ((- 1,1,2)) cv2.polylines (छवि, सत्य, 0,255,255), 3) cv2.imshow ("बहुभुज", छवि)
opencv # cv2.putText (छवि, 'पाठ प्रदर्शित करने के लिए पाठ', बूटॉम ने आरंभिक बिंदु, फ़ॉन्ट, फ़ॉन्ट आकार, रंग, मोटाई) छवि = np.zeros ((512,512,3), np.uint8) cv2 का उपयोग करके #putिंग पाठ। putText (छवि, "हैलो वर्ल्ड", (75,290), cv2.FONT_HERSHEY_COMPLEX, 2, (100,170,0), 3) cv2.imshow ("हैलो वर्ल्ड, इमेज) cv2.waitKey (0) cv2.destroyAllWindows ()
कंप्यूटर विज़न और OpenCV कवर करने के लिए बहुत विशाल विषय हैं लेकिन OpenCV और इमेज प्रोसेसिंग सीखने के लिए यह गाइड अच्छा शुरुआती बिंदु होगा।