OpenCV पायथन लाइब्रेरी ने कई छवियों को एक पैनोरमिक छवि में मर्ज करने की प्रक्रिया को स्वचालित करना संभव बना दिया है।

नयनाभिराम फ़ोटोग्राफ़ी एक व्यापक क्षेत्र को कैप्चर करने की तकनीक है जिसे एक फ़ोटोग्राफ़ प्राप्त नहीं कर सकता है। यह तकनीक एक एकल छवि बनाने के लिए एक साथ कई छवियों को सिलाई करती है जो पूरे दृश्य को एक प्रभावशाली तरीके से कैप्चर करती है।

पायथन की मदद से, आप इस प्रक्रिया को स्वचालित कर सकते हैं और आसानी से सुंदर चित्रमाला बना सकते हैं।

अपने पायथन पर्यावरण की स्थापना

के माध्यम से पालन करने के लिए, आपके पास एक होना चाहिए पायथन की बुनियादी समझ. कोई भी Python IDE लॉन्च करें और एक नया आभासी वातावरण बनाएँ. एक नई पायथन फ़ाइल बनाएँ। और टर्मिनल पर, OpenCV को स्थापित करने के लिए निम्न कमांड चलाएँ।


पाइप opencv-contrib-python स्थापित करें

आप प्रयोग करेंगे opencv-contrib-python छवियों को लोड करने और उनमें हेरफेर करने के लिए पुस्तकालय। इसमें है cv2. सीनेवाली वह वर्ग जिसका उपयोग आप पैनोरमा बनाने के लिए करेंगे।

इस लेख में प्रयुक्त पूर्ण स्रोत कोड और नमूना चित्र इसमें उपलब्ध हैं गिटहब रिपॉजिटरी.

आवश्यक पुस्तकालयों का आयात करना

instagram viewer

आयात करें cv2 और ओएस आपकी स्क्रिप्ट में मॉड्यूल। आप सिस्टम पथों के माध्यम से नेविगेट करने के लिए OS का उपयोग करेंगे।

आयात cv2
आयात ओएस

ओएस मॉड्यूल पायथन का एक अंतर्निहित मॉड्यूल है। यही कारण है कि आपको इसे बाहरी रूप से स्थापित करने की आवश्यकता नहीं है।

छवियों को लोड कर रहा है

उन छवियों को लोड करने के लिए एक फ़ंक्शन बनाएं जिन्हें आप स्टिच करना चाहते हैं। सबसे पहले, एक खाली सूची बनाएं जो प्रारंभिक छवियों को संग्रहित करेगी। फिर फ़ोल्डर पथ में प्रत्येक फ़ाइल के माध्यम से जाँच करें कि फ़ाइल एक छवि है या नहीं। यदि यह एक छवि है, लोड करें और इसे छवियों की सूची में जोड़ें।


डीईएफ़छवि लेाड करें(फ़ोल्डर की जगह):
# एक फ़ोल्डर से चित्र लोड करें और उनका आकार बदलें।
छवियां = []
के लिए फ़ाइल का नाम में os.listdir (folder_path):
# जांचें कि फ़ाइल एक छवि फ़ाइल है या नहीं
अगर फ़ाइल का नाम। समाप्त होता है ('.जेपीजी') या फ़ाइल का नाम। समाप्त होता है ('पीएनजी'):
# OpenCV का उपयोग करके छवि लोड करें और उसका आकार बदलें
छवि = cv2.imread (os.path.join (folder_path, फ़ाइल नाम))
छवियां। संलग्न करें (छवि)
वापस करना इमेजिस

आप अपने प्रोग्राम में विविधता लाने के लिए अधिक छवि फ़ाइल स्वरूप जोड़ सकते हैं। यह कोड केवल ढूंढेगा जेपीजी और पीएनजी फ़ाइल प्रारूप।

एक समान सिलाई और तेज़ प्रसंस्करण के लिए छवियों का आकार बदलना

एक ऐसा फ़ंक्शन बनाएं जो छवियों की सूची का आकार बदल देगा। फ़ंक्शन सूची में प्रत्येक छवि के माध्यम से लूप करेगा और उसका आकार बदल देगा। अंत में, आकार बदलने वाली छवियों को एक नई सूची में जोड़ें।


डीईएफ़resize_images(छवियां, चौड़ाई, ऊंचाई):
रीसाइज़_इमेज = []
के लिए छवि में इमेजिस:
resized_image = cv2.resize (छवि, (चौड़ाई, ऊंचाई))
resize_images.append (resize_image)
वापस करना resize_images

आकार बदलने से सुनिश्चित होता है कि छवियों की सिलाई एक समान है। यह तेजी से प्रसंस्करण के लिए फ़ाइल का आकार भी कम करता है।

छवियों को सिलने के लिए OpenCV के स्टिचर मॉड्यूल का उपयोग करना

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


डीईएफ़सिलाई_images(इमेजिस):
सिलाई करने वाला = cv2.Stitcher.create ()
(स्टेटस, स्टिच्ड_इमेज) = स्टिचर.स्टिच (इमेज)
अगर स्थिति == cv2.STITCHER_OK:
वापस करना फ़ॉलो करें
अन्य:
वापस करनाकोई नहीं

यदि सिलाई सफल रही (जैसा कि cv2.STITCHER_OK स्थिति कोड), फ़ंक्शन सिलाई वाली छवि वापस कर देगा। नहीं तो यह वापस आ जाएगा कोई नहीं.

सिले हुए इमेज को क्रॉप करना

एक ऐसा फंक्शन बनाएं जो सिले हुए चित्र को ग्रहण करेगा और उसे क्रॉप करने के बाद वापस करेगा। सबसे पहले, सिले हुए चित्र को ग्रेस्केल में बदलें। फिर बाइनरी इमेज बनाने के लिए बाइनरी थ्रेशोल्ड लागू करें। अंत में, बाइनरी इमेज में सबसे बड़ा कंटूर ढूंढें और इसकी बाउंडिंग आयत की गणना करें।


डीईएफ़छवि सुधारें # क्रॉप इमेज फोटो एडिटर(छवि):
ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
दहलीज = cv2.दहलीज (ग्रे, 0, 255, cv2.THRESH_BINARY)[1]
समोच्च = cv2.findContours (थ्रेश, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) [0]
x, y, w, h = cv2.बाउंडिंगरेक्ट (आकृति [0])
क्रॉप्ड_इमेज = इमेज [वाई: वाई + एच, एक्स: एक्स + डब्ल्यू]
वापस करना क्रॉप_इमेज

सिले हुए चित्र को बाउंडिंग आयत का उपयोग करके क्रॉप किया जाता है।

OpenCV का उपयोग करके सिले हुए चित्र का पूर्वावलोकन करना और सहेजना

एक ऐसा फंक्शन बनाएं जो सिले हुए इमेज को इंटरएक्टिव विंडो में प्रदर्शित करेगा और इसे डिस्क पर सेव करेगा।


डीईएफ़प्रीव्यू_और_सेव_इमेज(छवि, फ़ोल्डर_पथ, फ़ोल्डर_नाम):
# सिले हुए चित्र को प्रदर्शित करें
cv2.namedWindow ('सिले हुए चित्र', cv2.WINDOW_NORMAL)
cv2.imshow ('सिले हुए चित्र', छवि)
cv2.waitKey (0)

# सिले हुए इमेज को सेव करें
output_filename = os.path.join (फ़ोल्डर_पथ, फ़ोल्डर_नाम + '_panorama.jpg')
cv2.imwrite (output_filename, छवि)
प्रिंट ('फ़ोल्डर के लिए सहेजी गई सिले हुई छवि:', फ़ोल्डर का नाम)

पैनोरमा छवि उसी फ़ोल्डर में सहेजी जाती है जिसमें मूल छवियां होती हैं।

अपने कार्यक्रम के प्रवाह को नियंत्रित करना

एक फ़ंक्शन बनाएं जो आपके प्रोग्राम के प्रवाह को नियंत्रित करेगा। यह निर्दिष्ट फ़ोल्डर से सभी छवियों को लोड करेगा। आकार बदलें और उन्हें एक साथ सिलाई करें। सिली हुई छवि को क्रॉप करें, उसका पूर्वावलोकन प्रदर्शित करें, और फिर उसे डिस्क पर सहेजें। यदि फ़ोल्डर में दो से कम छवियां हैं, तो फ़ंक्शन एक त्रुटि संदेश प्रिंट करेगा और बिना किसी सिलाई या बचत के वापस आ जाएगा।


डीईएफ़सिलाई_फोल्डर(फ़ोल्डर_पथ, चौड़ाई =800, ऊंचाई =800):
# सभी छवियों को एक फ़ोल्डर में सिलाई करें और परिणाम सहेजें।
# फ़ोल्डर से छवियों को लोड करें
छवियां = load_images (फ़ोल्डर_पथ)

# जांचें कि फ़ोल्डर में कम से कम दो चित्र हैं या नहीं
अगर लेन (छवियां) < 2:
प्रिंट ('फ़ोल्डर में पर्याप्त चित्र नहीं हैं:', फ़ोल्डर की जगह)
वापस करना

# छवियों का आकार बदलें
resize_images = resize_images (छवियां, चौड़ाई, ऊंचाई)

# छवियों को सिलाई करें
स्टिच्ड_इमेज = स्टिच_इमेज (रीसाइज़्ड_इमेज)
अगर फ़ॉलो करें हैकोई नहीं:
प्रिंट ('फ़ोल्डर के लिए सिलाई विफल:', फ़ोल्डर की जगह)
वापस करना

# सिले हुए इमेज को क्रॉप करें
क्रॉप_इमेज = क्रॉप_इमेज (सिले_इमेज)

# सिले हुए चित्र का पूर्वावलोकन करें और सहेजें
फ़ोल्डर_नाम = os.path.basename (फ़ोल्डर_पथ)
प्रीव्यू_एंड_सेव_इमेज (क्रॉप्ड_इमेज, फोल्डर_पाथ, फोल्डर_नाम)

उस फोल्डर पाथ को पास करें जिसमें वे चित्र हैं जिन्हें आप स्टिच करना चाहते हैं।

सिलाई_फोल्डर ('नमूना_चित्र') 

आपके द्वारा उपयोग की जाने वाली छवियों में अतिव्यापी विशेषताएं होनी चाहिए। ये विशेषताएं छवि में प्रमुख स्थलों से लेकर बनावट पैटर्न तक कुछ भी हो सकती हैं। OpenCV उन्हें छवियों को संरेखित करने के लिए एक संदर्भ बिंदु के रूप में उपयोग करता है।

इन सुविधाओं के बिना, OpenCV के लिए छवियों को संरेखित करना और एक सहज चित्रमाला बनाना मुश्किल होगा।

अपने कार्यक्रम का परीक्षण

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

इस पहली छवि में पहाड़ी पर एक नज़र डालें।

इस दूसरी छवि में, पहाड़ी थोड़ी दिखाई दे रही है। यह एक अतिव्यापी विशेषता बनाता है।

छवियों को एक फ़ोल्डर में सहेजें। फ़ोल्डर पथ को पास करें सिलाई_फोल्डर सिलाई के लिए समारोह। और फिर प्रोग्राम को रन करें।

कार्यक्रम ने छवियों को एक साथ जोड़ दिया और दृश्य के व्यापक दृश्य के साथ एक मनोरम छवि बनाई। ध्यान दें कि उपरोक्त नयनाभिराम छवि बनाने के लिए, नौ छवियों का उपयोग किया गया था जो उपर्युक्त गिटहब रिपॉजिटरी में मौजूद हैं।

OpenCV का उपयोग करके छवियों का हेरफेर

पैनोरामा बनाना OpenCV द्वारा प्रदान की जाने वाली कई छवि हेरफेर तकनीकों में से कुछ को प्रदर्शित करता है। ऐसी और भी तकनीकें हैं जिनका उपयोग आप अपनी आवश्यकता के अनुरूप छवियों में हेरफेर करने के लिए कर सकते हैं। छवि हेरफेर से जुड़ी अधिक परियोजनाओं पर काम करने से आपको सामान्य रूप से अपने कंप्यूटर दृष्टि कौशल में सुधार करने में मदद मिलेगी।