इस समस्या में, हम देखेंगे कि पायथन किसी छवि या वीडियो फ़ाइल के किनारों का पता कैसे लगा सकता है। इसे प्राप्त करने के लिए, हमें OpenCV लाइब्रेरी की आवश्यकता है। OpenCV लाइब्रेरी मुख्य रूप से कंप्यूटर विज़न के लिए डिज़ाइन की गई है। यह खुला स्रोत है। मूल रूप से इसे इंटेल द्वारा डिजाइन किया गया था। यह ओपन-सोर्स बीएसडी लाइसेंस के तहत उपयोग करने के लिए स्वतंत्र है।
OpenCV कार्यक्षमता का उपयोग करने के लिए, हमें उन्हें pip. . का उपयोग करके डाउनलोड करना होगा OpenCV Numpy मॉड्यूल डाउनलोड करेगा। इसकी भी जरूरत पड़ेगी।
sudo pip3 install opencv-python
इनपुट के रूप में, इस मामले में, हमने एक वीडियो फ़ाइल का उपयोग किया है। इस एज डिटेक्शन प्रक्रिया के वास्तविक समय के प्रभाव को देखने के लिए हम अपने वेबकैम का भी उपयोग कर सकते हैं।
यहां हम एक वीडियो फाइल का उपयोग कर रहे हैं। वास्तविक छवि (वीडियो का फ्रेम) इस प्रकार है -
<केंद्र>
किनारे का पता लगाना कैसे काम करता है?
किनारों का पता लगाने के लिए, यह जांचने के लिए कुछ गणितीय अवलोकन हैं कि क्या पिक्सेल की चमक स्पष्ट रूप से बदल रही है।
हमें अपनी छवि के ग्रेस्केल संस्करण के लिए ग्रेडिएंट खोजने की आवश्यकता है। कंप्यूटर दृष्टि में, जब पिक्सेल काले से सफेद में स्थानांतरित होते हैं, तो इसे एक सकारात्मक ढलान के रूप में देखा जाता है। सफेद से काले रंग के संक्रमण के लिए, यह एक नकारात्मक ढलान है।
इमेज के व्युत्पन्न का उपयोग करके एज डिटेक्शन
एक छवि को एक मैट्रिक्स के रूप में संग्रहीत किया जाता है, जहां उस मैट्रिक्स के प्रत्येक तत्व में सभी पिक्सेल के बारे में जानकारी होती है। व्युत्पत्ति को खोजने के लिए हमें लैपलासीन ऑपरेटर की आवश्यकता होती है। तो लाप्लासियन प्राप्त करने के लिए, सबसे पहले हमें सोबेल डेरिवेटिव्स की आवश्यकता होती है। इन सोबेल डेरिवेटिव्स का उपयोग किसी छवि की ग्रेडिएंट भिन्नता प्राप्त करने के लिए किया जाता है।
क्षैतिज सोबेल व्युत्पन्न (सोबेल एक्स)
यह सोबेल व्युत्पन्न वास्तविक छवि और एक अन्य मैट्रिक्स (कर्नेल कहा जाता है) के दृढ़ संकल्प के माध्यम से प्राप्त किया जाता है। साधारण मामले के लिए कर्नेल 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
आउटपुट
<केंद्र>
ऊर्ध्वाधर सोबेल व्युत्पन्न (सोबेल वाई)
इसी तरह हम सोबेल () फ़ंक्शन का उपयोग करके वर्टिकल सोबेल व्युत्पन्न पा सकते हैं। इस स्थिति में 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
आउटपुट
<केंद्र>
लाप्लासियन व्युत्पन्न
अंत में हम प्रतिबिम्ब का लैप्लासियन व्युत्पन्न देखेंगे। लैपलासीन () नामक एक फ़ंक्शन है। इसका उपयोग व्युत्पन्न प्राप्त करने के लिए किया जाता है।
उदाहरण कोड
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
आउटपुट
<केंद्र>