Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

OpenCV का उपयोग करके छवि के किनारों का पता लगाने के लिए पायथन प्रोग्राम

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

OpenCV कार्यक्षमता का उपयोग करने के लिए, हमें उन्हें pip. . का उपयोग करके डाउनलोड करना होगा OpenCV Numpy मॉड्यूल डाउनलोड करेगा। इसकी भी जरूरत पड़ेगी।

sudo pip3 install opencv-python

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

यहां हम एक वीडियो फाइल का उपयोग कर रहे हैं। वास्तविक छवि (वीडियो का फ्रेम) इस प्रकार है -

<केंद्र> OpenCV का उपयोग करके छवि के किनारों का पता लगाने के लिए पायथन प्रोग्राम

किनारे का पता लगाना कैसे काम करता है?

किनारों का पता लगाने के लिए, यह जांचने के लिए कुछ गणितीय अवलोकन हैं कि क्या पिक्सेल की चमक स्पष्ट रूप से बदल रही है।

हमें अपनी छवि के ग्रेस्केल संस्करण के लिए ग्रेडिएंट खोजने की आवश्यकता है। कंप्यूटर दृष्टि में, जब पिक्सेल काले से सफेद में स्थानांतरित होते हैं, तो इसे एक सकारात्मक ढलान के रूप में देखा जाता है। सफेद से काले रंग के संक्रमण के लिए, यह एक नकारात्मक ढलान है।

इमेज के व्युत्पन्न का उपयोग करके एज डिटेक्शन

एक छवि को एक मैट्रिक्स के रूप में संग्रहीत किया जाता है, जहां उस मैट्रिक्स के प्रत्येक तत्व में सभी पिक्सेल के बारे में जानकारी होती है। व्युत्पत्ति को खोजने के लिए हमें लैपलासीन ऑपरेटर की आवश्यकता होती है। तो लाप्लासियन प्राप्त करने के लिए, सबसे पहले हमें सोबेल डेरिवेटिव्स की आवश्यकता होती है। इन सोबेल डेरिवेटिव्स का उपयोग किसी छवि की ग्रेडिएंट भिन्नता प्राप्त करने के लिए किया जाता है।

क्षैतिज सोबेल व्युत्पन्न (सोबेल एक्स)

यह सोबेल व्युत्पन्न वास्तविक छवि और एक अन्य मैट्रिक्स (कर्नेल कहा जाता है) के दृढ़ संकल्प के माध्यम से प्राप्त किया जाता है। साधारण मामले के लिए कर्नेल 3x3 मैट्रिक्स है।

सोबेल () . नामक एक फ़ंक्शन है . इस फ़ंक्शन का उपयोग करके, हम सोबेल डेरिवेटिव पा सकते हैं। जब हम सोबेल x प्राप्त करने का प्रयास कर रहे हैं, तो y भाग 0 होना चाहिए।

उदाहरण कोड

import cv2
import numpy as np
capture = cv2.VideoCapture('sample_video.mp4') #Capture frames from video file.
while(capture.isOpened()): # Run the loop until the video ends
   ret, frame = capture.read() #Fetch the frames from video
   # Convert BGR color to (Hue Saturation Value) mode
   hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
   # The Sobelx Method
   sobelx = cv2.Sobel(frame,cv2.CV_64F,1,0,ksize=5)
   cv2.imshow('SobelX',sobelx)
   k = cv2.waitKey(5) & 0xFF
   if k == 27: #27 is the ASCII for ESC key. When ESC is pressed, it will stop
      break
capture.release()
cv2.destroyAllWindows() #Clean memory after removing the windows

आउटपुट

<केंद्र> OpenCV का उपयोग करके छवि के किनारों का पता लगाने के लिए पायथन प्रोग्राम

ऊर्ध्वाधर सोबेल व्युत्पन्न (सोबेल वाई)

इसी तरह हम सोबेल () फ़ंक्शन का उपयोग करके वर्टिकल सोबेल व्युत्पन्न पा सकते हैं। इस स्थिति में x भाग 0 होगा।

उदाहरण कोड

import cv2
import numpy as np
capture = cv2.VideoCapture('sample_video.mp4') #Capture frames from video file.
while(capture.isOpened()): # Run the loop until the video ends
   ret, frame = capture.read() #Fetch the frames from video
   # Convert BGR color to (Hue Saturation Value) mode
   hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
   # The Sobely Method
   sobely = cv2.Sobel(frame,cv2.CV_64F,0,1,ksize=5)
   cv2.imshow('SobelY',sobely)
   k = cv2.waitKey(5) & 0xFF
   if k == 27: #27 is the ASCII for ESC key. When ESC is pressed, it will stop
      break
capture.release()
cv2.destroyAllWindows() #Clean memory after removing the windows

आउटपुट

<केंद्र> OpenCV का उपयोग करके छवि के किनारों का पता लगाने के लिए पायथन प्रोग्राम

लाप्लासियन व्युत्पन्न

अंत में हम प्रतिबिम्ब का लैप्लासियन व्युत्पन्न देखेंगे। लैपलासीन () नामक एक फ़ंक्शन है। इसका उपयोग व्युत्पन्न प्राप्त करने के लिए किया जाता है।

उदाहरण कोड

import cv2
import numpy as np
capture = cv2.VideoCapture('sample_video.mp4') #Capture frames from video file.
while(capture.isOpened()): # Run the loop until the video ends
   ret, frame = capture.read() #Fetch the frames from video
   # Convert BGR color to (Hue Saturation Value) mode
   hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
   # The Laplacian Method
   laplacian = cv2.Laplacian(frame,cv2.CV_64F)
   cv2.imshow('Laplacian',laplacian)
   k = cv2.waitKey(5) & 0xFF
   if k == 27: #27 is the ASCII for ESC key. When ESC is pressed, it will stop
      break
capture.release()
cv2.destroyAllWindows() #Clean memory after removing the windows

आउटपुट

<केंद्र> OpenCV का उपयोग करके छवि के किनारों का पता लगाने के लिए पायथन प्रोग्राम
  1. पायथन का उपयोग कर छवियों को पढ़ना?

    OpenCV का उपयोग करके इमेज प्रोसेसिंग OpenCV (ओपन सोर्स कंप्यूटर विज़न) एक ओपन सोर्स प्रोग्रामिंग लाइब्रेरी है जिसे मूल रूप से मशीन लर्निंग और कंप्यूटर विज़न के लिए विकसित किया गया है। यह कंप्यूटर विज़न अनुप्रयोगों पर काम करने और व्यावसायिक उत्पादों में मशीन लर्निंग के उपयोग को तेज़ करने के लिए सामा

  1. पायथन में ओपनसीवी का उपयोग करके टेम्पलेट मिलान

    टेम्पलेट मिलान एक ऐसी तकनीक है, जिसके द्वारा वास्तविक छवि से पैच या टेम्पलेट का मिलान किया जा सकता है। यह मूल रूप से एक पैटर्न मिलान तंत्र है। पायथन में ओपनसीवी मॉड्यूल है। ओपनसीवी का उपयोग करके, हम आसानी से मैच ढूंढ सकते हैं। तो इस समस्या में, OpenVC टेम्पलेट मिलान तकनीकों का उपयोग किया जाता है।

  1. पायथन ओपनसीवी मॉड्यूल का उपयोग करके हिस्टोग्राम इक्वलाइजेशन

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