Python संग OpenCV परिचय | छवि देखि वास्तविक‑समय प्रक्रिया सम्म

目次

1. OpenCV के हो?

Python मा छवि प्रशोधनमा, OpenCV(cv2) एक अत्यन्त महत्वपूर्ण पुस्तकालय हो। यस खण्डमा, OpenCV के हो, किन Python मा प्रयोग गर्नु पर्छ, र यसको सारांशको बारेमा व्याख्या गर्नेछौं।

OpenCV को सारांश

OpenCV(Open Source Computer Vision Library) छवि प्रशोधन र कम्प्युटर भिजनको लागि पुस्तकालय हो। मूलत: Intel द्वारा विकास गरिएको, अहिले खुला स्रोत परियोजनाको रूपमा धेरै विकासकर्ता र शोधकर्ता द्वारा मर्मत गरिन्छ। OpenCV केवल Python मा मात्र नभई C++ र Java लगायत अन्य प्रोग्रामिङ भाषाहरूमा पनि प्रयोग गर्न सकिन्छ, तर Python सँगको संयोजन विशेष गरी लोकप्रिय छ। यसको कारण Python को सरलता र OpenCV को शक्तिशाली छवि प्रशोधन क्षमताहरूको उत्तम मिलन हो, जसले शुरुआतीदेखि उन्नत प्रयोगकर्तासम्म विस्तृत प्रयोगकर्ता वर्गलाई आकर्षित गरेको छ।

Python मा OpenCV को फाइदाहरू

  1. सरल इन्टरफेस OpenCV सरल र बुझ्न सजिलो API प्रदान गर्दछ, Python कोड प्रयोग गरेर केही लाइनको कोडले उन्नत छवि प्रशोधन सम्भव हुन्छ। उदाहरणका लागि, छवि लोड, प्रदर्शन, र रिसाइज जस्ता आधारभूत कार्यहरू सजिलै गर्न सकिन्छ।
  2. धेरै सुविधाहरू OpenCV ले छवि लोड र प्रदर्शन मात्र होइन, रंग स्थान रूपान्तरण, किनारा पत्ता लगाउने, वस्तु पहिचान, अनुहार पहिचान आदि जस्ता विभिन्न कार्यहरूलाई समर्थन गर्दछ। यसले आधारभूत छवि प्रशोधनदेखि उन्नत मेसिन लर्निङ प्रयोग गरेर छवि पहिचानसम्म विस्तृत प्रयोगहरू सम्भव बनाउँछ।
  3. ठूलो समुदाय र समर्थन OpenCV धेरै विकासकर्ताहरूले प्रयोग गर्ने भएकाले, इन्टरनेटमा प्रशस्त दस्तावेज, ट्युटोरियल, नमुना कोडहरू उपलब्ध छन्। समस्या आएमा पनि, समुदाय फोरम वा Q&A साइटहरूमा समाधान सजिलै पाउन सकिन्छ, जुन ठूलो फाइदा हो।

कसरी प्रयोग गरिन्छ?

OpenCV छवि पहिचान, अनुहार पहिचान, गति ट्र्याकिङ, रोबोट भिजन आदि विभिन्न क्षेत्रहरूमा प्रयोग गरिन्छ। विशेष गरी, तलका परिस्थितिहरूमा उपयोगी छ:
  • निगरानी क्यामेरा प्रणाली:अनुहार पहिचान र असामान्य व्यवहार पत्ता लगाउने।
  • चिकित्सा छवि प्रशोधन:CT स्क्यान र MRI छविको विश्लेषण।
  • स्वचालित ड्राइभिङ:वस्तु पहिचान र लेन पहिचान।
OpenCV वास्तविक परियोजनामा प्रयोग गर्दा पनि, द्रुत र स्थिर प्रशोधन प्रदान गर्ने कारणले, कम्पनीहरूमा पनि व्यापक रूपमा प्रयोग गरिन्छ।

2. Python मा OpenCV इन्स्टल गर्ने तरिका

अर्को, Python वातावरणमा OpenCV इन्स्टल गर्ने तरिकाबारे व्याख्या गर्छौं। यस भागमा, pip प्रयोग गरेर लाइब्रेरीलाई सजिलै इन्स्टल गर्ने चरणहरू र सामान्य त्रुटिहरूको समाधान विधिहरू प्रस्तुत गरिन्छ।

OpenCV को इन्स्टल प्रक्रिया

Python मा OpenCV प्रयोग गर्नको लागि, पहिलो चरणमा लाइब्रेरी इन्स्टल गर्न आवश्यक छ। सबैभन्दा सामान्य इन्स्टल विधि भनेको Python को प्याकेज व्यवस्थापन प्रणाली “pip” प्रयोग गर्ने हो। तलको कमाण्ड प्रयोग गरेर OpenCV इन्स्टल गर्नुहोस्।
pip install opencv-python
यो कमाण्ड चलाएपछि, Python वातावरणमा OpenCV इन्स्टल हुन्छ। साथै, छवि प्रशोधनका लागि आवश्यक अतिरिक्त सुविधाहरू प्रदान गर्ने “opencv-python-headless” प्याकेज पनि आवश्यक परे इन्स्टल गर्न सकिन्छ। विशेष गरी, GUI आवश्यक नपर्ने सर्भर वातावरणजस्ता स्थितिहरूमा headless संस्करण सिफारिस गरिन्छ।
pip install opencv-python-headless

सामान्य त्रुटिहरू र समाधान विधिहरू

  1. ModuleNotFoundError: No module named 'cv2' OpenCV इन्स्टल नभएको अवस्थामा, वा Python वातावरण सहीसँग सेट नभएको अवस्थामा यो त्रुटि उत्पन्न हुन्छ। यदि यो त्रुटि देखियो भने, पहिलो पटक OpenCV सहीसँग इन्स्टल भएको छ कि छैन जाँच गर्नुहोस्। इन्स्टल गरेपछि स्क्रिप्टलाई फेरि चलाउनुहोस्।
  2. निर्भरताको समस्या OpenCV इन्स्टल गर्दा निर्भरतासँग सम्बन्धित त्रुटि उत्पन्न हुन सक्छ। यस्तो अवस्थामा, opencv-contrib-python जस्ता अतिरिक्त प्याकेजहरू इन्स्टल गरेर समाधान गर्न सकिन्छ।
pip install opencv-contrib-python
  1. संस्करण असंगतता Python को संस्करण र OpenCV को संस्करण मिलेन भने पनि त्रुटि उत्पन्न हुन सक्छ। यस्तो अवस्थामा, OpenCV को आधिकारिक दस्तावेजमा उपयुक्त संस्करण जाँच गरी, सही संस्करण इन्स्टल गर्नुहोस्।
年収訴求

3. छवि लोड गर्ने तरिका

OpenCV प्रयोग गरेर छवि लोड गर्ने तरिका धेरै सरल छ। यहाँ, cv2.imread() फङ्क्शन प्रयोग गरेर छवि लोड गर्ने, र cv2.imshow() फङ्क्शनले छवि देखाउने प्रक्रिया प्रस्तुत गरिन्छ।

छवि लोड गर्ने

Python को OpenCV प्रयोग गरेर छवि लोड गर्न, cv2.imread() प्रयोग गर्नुहोस्। यो फङ्क्शन निर्दिष्ट फाइल पाथबाट छवि लोड गरी, NumPy एरेको रूपमा फिर्ता गर्छ।
import cv2

# छवि लोड गर्ने
image = cv2.imread('example.jpg')
यहाँ ध्यान दिनुपर्ने कुरा फाइल पाथ सही रूपमा निर्दिष्ट गरिएको हो। पूर्ण पाथ प्रयोग गर्नुहोस् वा स्क्रिप्ट चल्ने डाइरेक्टरीमा छवि फाइल रहेको कुरा जाँच गर्नुहोस्।

छवि देखाउने

लोड गरिएको छवि देखाउन, cv2.imshow() फङ्क्शन प्रयोग गर्नुहोस्। तलको कोडले लोड गरिएको छवि नयाँ विन्डोमा देखाउँछ, र कुञ्जी थिचिनु सम्म पर्खन्छ।
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
उपरोक्त कोडमा, cv2.imshow() ले छवि देखाउँछ, cv2.waitKey(0) ले प्रयोगकर्ताको कुञ्जी इनपुटको प्रतीक्षा गर्छ। कुञ्जी थिचिएपछि cv2.destroyAllWindows() ले सबै खुला विन्डोहरू बन्द गर्छ। cv2.waitKey() मा आर्गुमेन्ट 0 राख्दा, अनिश्चितकालसम्म कुञ्जी इनपुटको प्रतीक्षा हुन्छ। मिलिसेकेन्डमा प्रतीक्षा गर्न चाहनुहुन्छ भने, cv2.waitKey(1000) जस्तै निर्दिष्ट गर्नुहोस्।

छवि सही रूपमा लोड नहुनु भएमा समाधान

यदि छवि सही रूपमा लोड हुन सकेन भने, None फिर्ता हुन्छ। यसलाई जाँच गर्न, तलको जस्तै एरर जाँच थप्न सिफारिस गरिन्छ।
if image is None:
    print("छवि फेला परेन")
else:
    cv2.imshow('Image', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
फाइल पाथ गलत छ, छवि फाइल बिग्रिएको छ, वा असमर्थित छवि ढाँचा भएको अवस्थामा, यस जस्ता जाँचले डिबग गर्न सजिलो बनाउँछ।

4. छविको पूर्वप्रक्रिया र आकार परिवर्तन

छवि प्रक्रिया गर्नु अघि, छविको आकार समायोजन वा रंग स्थान परिवर्तन जस्ता कार्यहरू सामान्य हुन्छन्। यस खण्डमा, cv2.resize() प्रयोग गरेर छविको आकार परिवर्तन गर्ने तरिका र रंग स्थान परिवर्तनबारे व्याख्या गरिनेछ।

छविको आकार परिवर्तन

छविको आकार परिवर्तन गर्न, cv2.resize() फलन प्रयोग गरिन्छ। यो फलनले मूल छविको आकारलाई निर्दिष्ट आकारमा परिवर्तन गर्छ। तल, cv2.resize() प्रयोग गरेर छविको आकार परिवर्तन गर्ने उदाहरण देखाइएको छ।
import cv2

# छवि लोड गर्नुहोस्
image = cv2.imread('example.jpg')

# छविको आकार परिवर्तन
resized_image = cv2.resize(image, (400, 300))

# आकार परिवर्तन पछि छवि देखाउनुहोस्
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
यहाँ, (400, 300) नयाँ चौडाइ र उचाइ निर्दिष्ट गर्दछ। आकारको अनुपात कायम राख्दै परिवर्तन गर्न चाहनुहुन्छ भने, fxfy पैरामीटर प्रयोग गरेर चौडाइ र उचाइको स्केल सेट गर्न सकिन्छ।
resized_image = cv2.resize(image, None, fx=0.5, fy=0.5)
यस उदाहरणमा, छविको आकारलाई ५०% मा सानो बनाइन्छ। None निर्दिष्ट गरेर, निश्चित आकारको सट्टा अनुपातद्वारा आकार परिवर्तन गर्न सकिन्छ।

रंग स्थानको परिवर्तन</hविलाई प्रक्रिया गर्दा, रंग स्थान परिवर्तन गर्नु महत्त्वपूर्ण हुन्छ। उदाहरणका लागि, रङ्गीन छविलाई ग्रेस्केलमा परिवर्तन गर्दा गणनात्मक भार घट्छ र प्रक्रिया गति बढ्छ। OpenCV मा, cv2.cvtColor() प्रयोग गरेर रंग स्थान परिवर्तन गर्न सकिन्छ।

# छविलाई ग्रेस्केलमा परिवर्तन गर्नु
gray_image = cv2.cvt(image, cv2.COLOR_BGR2GRAY)

# ग्रेस्केल छवि देखाउनु
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
यस कोडमा, cv2.COLOR_BGR2GRAY निर्दिष्ट गरेर, BGR (Blue, Green, Red) रङ्गीन छविलाई ग्रेस्केलमा परिवर्तन गरिएको छ। ग्रेस्कमा परिवर्तन गर्दा, छविको सूचना मात्रा धेरै घट्छ र प्रभावकारी प्रक्रिया सम्भव हुन्छ।

5. उन्नत छवि प्रसंस्करण: किनारा पत्ता लगाउने र हिस्टोग्राम विश्लेषण

OpenCV मा, छविको विस्तृत विश्लेषण र वस्तु पहिचान गर्न किनारा पत्ता लगाउने र हिस्टोग्राम विश्लेषण महत्वपूर्ण भूमिका खेल्दछन्। यहाँ, cv2.findContours() प्रयोग गरेर किनारा पत्ता लगाउने र cv2.calcHist() प्रयोग गरेर हिस्टोग्राम विश्लेषणको बारेमा व्याख्या गर्नेछौं।

किनारा पत्ता लगाउने

किनारा पत्ता लगाउने वस्तुको आकार पहिचान गर्नको आधारभूत प्रक्रिया हो। OpenCV मा, द्विआधारीकृत छविहरू प्रयोग गरेर किनारा पत्ता लगाउन सकिन्छ। पहिलो, छविलाई ग्रेस्केलमा रूपान्तरण गरिन्छ, त्यसपछि द्विआधारीकरण गरिन्छ, अन्तमा किनारा पत्ता लगाइन्छ।
# ग्रेस्केलमा रूपान्तरण
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# द्विआधारीकरण
ret, thresh = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# किनारा पत्ता लगाउने
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# किनारा रेखाचित्र
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)

# परिणाम देखाउनु
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
यस कोडमा, पहिलो छविलाई ग्रेस्केलमा रूपान्तरण गरिन्छ, त्यसपछि द्विआधारीकरण प्रक्रिया गरिन्छ। द्विआधारीकृत छविलाई प्रयोग गरेर, cv2.findContours() द्वारा किनारा पत्ता लगाइन्छ, र cv2.drawContours() द्वारा पत्ता लागेको किनारा छविमा रेखाचित्र गरिन्छ।

हिस्टोग्राम विश्लेषण

हिस्टोग्राम विश्लेषण छविको रंग वितरणलाई दृश्यात्मक बनाउने विधि हो। OpenCV मा, cv2.calcHist() प्रयोग गरेर हिस्टोग्राम गणना गर्न सकिन्छ, र matplotlib प्रयोग गरेर त्यसलाई प्लट गर्न सकिन्छ।
import matplotlib.pyplot as plt

# हिस्टोग्राम गणना
hist = cv2.calcHist([image], [0], None, [256], [0, 256])

# हिस्टोग्राम प्लट
plt.plot(hist)
plt.show()
यस कोडमा, छविको निलो च्यानलको हिस्टोग्राम गणना गरिन्छ, र matplotlib द्वारा प्लट गरिन्छ। हिस्टोग्राम प्रयोग गरेर, छविमा उज्यालो र कन्ट्रास्टको वितरणलाई दृश्यात्मक बनाउन सकिन्छ।

6. व्यावहारिक उदाहरण: रियल‑टाइम इमेज प्रोसेसिंग

OpenCV स्थिर इमेज प्रोसेसिंग मात्र होइन, क्यामेराबाट रियल‑टाइममा भिडियो प्रोसेस गर्न पनि सक्षम छ। यस सेक्सनमा,code>cv2.VideoCapture() प्रयोग गरेर रियल‑टाइम भिडियो प्राप्ति र प्रोसेसिङ विधि प्रस्तुत गरिन्छ। यसलाई प्रयोग गरेर, भिडियोको रियल‑टाइम फिल्टरिङ वा वस्तु पहिचान जस्ता विभिन्न अनुप्रयोगहरू सम्भव हुन्छन्।

क्यामेरा भिडियोको क्याप्चर

OpenCV को cv2.VideoCapture() प्रयोग गरेर, क्यामेरा भिडियोलाई रियल‑टाइममा क्याप्चर गर्न सकिन्छ। तलको कोड क्यामेराबाट भिडियो प्राप्त गरी प्रदर्शन गर्ने आधारभूत तरिका हो।
import cv2

# क्यामेरालाई सुरु गर्नुहोस्
cap = cv2.VideoCapture(0)

# क्यामेरा भिडियो प्राप्त गर्न सकिन्छ कि जाँच गर्नुहोस्
if not cap.isOpened():
    print("क्यामेरा खोल्न सकिएन")
    exit()

while True:
    # फ्रेम अनुसार भिडियो पढ्नुहोस्
    ret, frame = cap.read()

    if not ret:
        print("फ्रेम प्राप्त गर्न सकिएन")
        break

    # फ्रेम देखाउनु cv2.imshow('Camera Feed', frame)

    # 'q' कुञ्जी थिच्दा समाप्त गर्नुहोस्
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# स्रोतहरू मुक्त गरी विन्डो बन्द गर्नुहोस्
cap.release()
cv2.destroyAllWindows()</pre

रियल‑टाइम फिल्टरिङ

क्यामेराबाट प्राप्त रियल‑टाइम भिडियोलाई मात्र प्रदर्शन गर्ने होइन, विभिन्न फिल्टरिङ र इफेक्टहरू पनि थप्न सकिन्छ। उदाहरण लागि, भिडियोलाई रियल‑टाइममा ग्रेस्केलमा रूपान्तरण गरी प्रदर्शन गर्न सकिन्छ।
while True:
    ret, frame = cap.read()

    if not ret:
        break

    # फ्रेमलाई ग्रेस्केलमा रूपान्तरण गर्नुहोस्
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # ग्रेस्केल फ्रेम देखाउनुहोस्
    cv2.imshow('Grayscale Camera Feed', gray_frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
यस उदाहरणमा, क्यामेरा भिडियोलाई ग्रेस्केलमा रूपान्तरण गरीाइममा प्रदर्शन गरिएको छ। cv2.cvtColor() प्रयोग गरेर BGR कलर इमेजलाई ग्रेस्केलमा रूपान्तरण गर्दा, गणनात्मक लोड घटाउँदै भिडियो प्रोसेस गर्न सकिन्छ।

7. समस्या समाधान

OpenCV प्रयोग गर्दा विभिन्न त्रुटि र समस्याहरूको सामना गर्न सकिन्छ। यस भागमा, प्रायः देखिने समस्याहरू र तिनीहरूको समाधानबारे व्याख्या गरिएको छ।

1. OpenCV इन्स्टल गरिएको छैन

त्रुटि: ModuleNotFoundError: No module named 'cv2' यो त्रुटि OpenCV Python वातावरणमा इन्स्टल नभएको कारणले उत्पन्न हुन्छ। यसलाई समाधान गर्न, तलको कमाण्ड प्रयोग गरेर OpenCV इन्स्टल गर्नुहोस्।
pip install opencv-python
हेडलेस संस्करण (GUI आवश्यक नपर्ने अवस्थामा) तलको कमाण्डले इन्स्टल गर्न सकिन्छ।
pip install opencv-python-headless

2. क्यामेरा पहिचान हुँदैन

त्रुटि: cv2.VideoCapture(0) ले क्यामेरा खोल्न नसकेमा, क्यामेरा पहिचान नभएको सम्भावना छ। समाधान:
  • क्यामेरा सही रूपमा जडान भएको छ कि छैन जाँच गर्नुहोस्।
  • अन्य अनुप्रयोगहरूले क्यामेरा प्रयोग गरिरहेका छैनन् कि जाँच गर्नुहोस्।
  • यदि धेरै क्यामेरा छन् भने, इन्डेक्स नम्बर परिवर्तन गरेर प्रयास गर्नुहोस्। उदाहरणका लागि, cv2.VideoCapture(1) जस्तै।

3. छवि लोड गर्न असफल

त्रुटि: छवि फाइल फेला नपरेको वा सही रूपमा लोड नहुनुि उत्पन्न हुन्छ। समाधान:
  • छविको पथ सही छ कि छैन जाँच गर्नुहोस्। सापेक्ष पथको सट्टा पूर्ण पथ प्रयोग गर्न सिफारिस गरिन्छ।
  • छवि फाइलको ढाँचा समर्थित छ कि छैन जाँच गर्नुहोस्। OpenCV JPEG र PNG ढाँचालाई समर्थन गर्छ, तर अन्य ढाँचाहरूका लागि अतिरिक्त लाइब्रेरी आवश्यक पर्न सक्छ।
image = cv2.imread('/path/to/your/image.jpg')
if image is None:
    print("छवि लोड गर्न सकिएन")

8. सारांश

OpenCV, Python प्रयोग गरेर छवि प्रशोधनमा एक शक्तिशाली उपकरण हो। स्थापना प्रक्रिया देखि आधारभूत छवि सञ्चालन, रियल‑टाइम भिडियो प्रशोधनसम्म, विस्तृत सुविधाहरूलाई सजिलै प्रयोग गर्न सकिन्छ, र यो शुरुआतीदेखि उन्नत प्रयोगकर्तासम्म धेरै प्रयोगकर्ताहरूको लागि उपयुक्त छ। यस लेखमार्फत, आधारभूत छवि प्रशोधनको क्रम सिक्नुहोस्, र अर्को चरणमा अनुप्रयोगात्मक प्रशोधन वा मेसिन लर्निङसँग संयोजन गरिएको उन्नत प्रशोधनमा चुनौती दिनुहोस्। OpenCV धेरै परियोजनाहरूमा उपयोगी उपकरण बन्नेछ।