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

OpenCV के साथ अजगर में रेखा का पता लगाना?

इस पोस्ट में, हम हफ़ ट्रांसफ़ॉर्म नामक तकनीक की सहायता से छवि में रेखाओं का पता लगाने का तरीका जानेंगे।

हफ़ ट्रांसफ़ॉर्म?

यदि आप गणितीय रूप में उस आकृति का प्रतिनिधित्व कर सकते हैं, तो किसी भी साधारण आकार का पता लगाने के लिए हफ़ ट्रांसफ़ॉर्म एक सुविधा निष्कर्षण विधि है। यह किसी भी तरह आकार का पता लगाने में कामयाब होता है, भले ही वह थोड़ा सा टूटा या विकृत हो। हम देखेंगे कि यह एक लाइन के लिए कैसे काम करता है।

एक "सरल" आकार वह है जिसे केवल कुछ मापदंडों द्वारा दर्शाया जा सकता है। उदाहरण के लिए, एक रेखा को केवल दो मापदंडों (ढलान, अवरोधन) द्वारा दर्शाया जा सकता है और एक वृत्त के तीन पैरामीटर होते हैं - केंद्र के निर्देशांक और त्रिज्या (x,y, r)।

हफ़ ट्रांसफ़ॉर्म का इस्तेमाल करके इमेज से लाइनों का पता लगाएं

एक रेखा को एक समीकरण द्वारा दर्शाया जा सकता है- या पैरामीट्रिक रूप में इसे इस रूप में दर्शाया जा सकता है, जहां (ρ) मूल से रेखा तक की लंबवत दूरी है, और ϴ इस लंबवत रेखा द्वारा निर्मित कोण है और काउंटर में मापा गया क्षैतिज अक्ष है। -क्लॉकवाइज (यह प्रतिनिधित्व OpenCV में उपयोग किया जाता है)। नीचे दी गई छवि देखें


OpenCV के साथ अजगर में रेखा का पता लगाना?

अतः यदि रेखा मूल बिन्दु के नीचे से गुजर रही है, तो उसका एक धनात्मक rho और कोण 180 से कम होगा। यदि वह मूल से ऊपर जा रहा है, तो 180 से अधिक कोण लेने के बजाय, कोण 180 से कम लिया जाता है, और rho ऋणात्मक लिया जाता है। किसी भी खड़ी रेखा में 0 डिग्री और क्षैतिज रेखाओं में 90 डिग्री होगी।

संचयक

इन दो पदों (ρ,ϴ) में किसी भी रेखा का प्रतिनिधित्व किया जा सकता है। तो पहले यह एक 2D सरणी या संचायक (दो मापदंडों के मान रखने के लिए) बनाता है और इसे प्रारंभ में 0 पर सेट किया जाता है। जहाँ पंक्तियाँ को दर्शाती हैं और स्तंभ को दर्शाते हैं। सरणी का आकार उस सटीकता पर निर्भर करता है जिसकी हमें आवश्यकता होती है, उदाहरण के लिए, यदि हमें कोणों की सटीकता 1 डिग्री होने की आवश्यकता है, तो आपको 180 कॉलम और ρ की आवश्यकता है, अधिकतम संभव दूरी छवि की विकर्ण लंबाई है और ρ अधिकतम संभव दूरी है छवि की विकर्ण लंबाई है। इसलिए एक पिक्सेल सटीकता और पंक्तियों की संख्या लेना छवि की विकर्ण लंबाई हो सकती है।

विचार करें कि हमारे पास बीच में एक क्षैतिज रेखा के साथ 100*100 की छवि है। रेखा का पहला बिंदु लें, और हम इसके (x, y) मान जानते हैं। अब समीकरण में, =0,1,2,3…180 के मानों को दर्ज करें और प्राप्त होने वाले मान की जांच करें। प्रत्येक (ρ,ϴ) जोड़ी के लिए, एक द्वारा वृद्धि मूल्य इसके संबंधित (ρ,ϴ) कोशिकाओं में हमारा संचायक है। तो अब संचायक में, सेल (50,90) =1 कुछ अन्य कोशिकाओं के साथ। अब लाइन पर दूसरा स्थान लें। उसी प्रक्रिया को दोहराएं जैसा हमने पहले स्थान के लिए किया था। आपको प्राप्त होने वाले (ρ,ϴ) के अनुरूप कक्षों में मान बढ़ाएँ। इस बार, सेल (50,90)=2। तो हम वास्तव में (ρ,ϴ) मूल्यों को वोट कर रहे हैं। हम इस प्रक्रिया को लाइन पर हर बिंदु के लिए जारी रखते हैं। प्रत्येक स्थान पर, सेल (50,90) को बढ़ाया जाएगा या वोट दिया जाएगा, जबकि अन्य सेल को वोट नहीं दिया जा सकता है। इस तरह, अंत में, सेल (50,90) के पास अधिकतम वोट होंगे। इसलिए यदि आप अधिकतम वोटों के लिए संचायक की खोज करते हैं, तो आपको मान (50,90) मिलता है, जो कहता है, इस छवि में मूल से 50 की दूरी पर और 90 डिग्री के कोण पर एक रेखा है। लाइनों के लिए हॉफ ट्रांसफॉर्म इस तरह काम करता है।

OpenCV में हफ़ ट्रांसफ़ॉर्म

ऊपर बताया गया सब कुछ OpenCV फ़ंक्शन, cv2.HoughLines() में समझाया गया है। यह केवल (ρ,ϴ) मानों की एक सरणी देता है जहां ρ को पिक्सेल में मापा जाता है और ϴ को रेडियन में मापा जाता है।

नीचे ओपनसीवी और हफ लाइन ट्रांसफॉर्म का उपयोग करके लाइन डिटेक्शन का एक प्रोग्राम है।

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

OpenCV के साथ अजगर में रेखा का पता लगाना?

उदाहरण

import cv2
import numpy as np
img = cv2.imread("parkingLot1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 75, 150)
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 30, maxLineGap=250)
for line in lines:
   x1, y1, x2, y2 = line[0]
   cv2.line(img, (x1, y1), (x2, y2), (0, 0, 128), 1)
cv2.imshow("linesEdges", edges)
cv2.imshow("linesDetected", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

परिणाम

OpenCV के साथ अजगर में रेखा का पता लगाना?

और लाइनों का पता चला-

OpenCV के साथ अजगर में रेखा का पता लगाना?


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

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

  1. पायथन ओपनसीवी मॉड्यूल का उपयोग करके छवियों पर ज्यामितीय आकार बनाएं

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

  1. Python OpenCv का उपयोग करके रिवर्स मोड में एक वीडियो चलाएं

    ओपनसीवी का फुल फॉर्म ओपन सोर्स कंप्यूटर विज़न है, इस लाइब्रेरी का उपयोग करके हम इमेज, वीडियो पर अलग-अलग ऑपरेशन कर सकते हैं। OpenCV के अनुप्रयोग क्षेत्र चेहरे की पहचान प्रणाली मोशन ट्रैकिंग कृत्रिम तंत्रिका नेटवर्क डीप न्यूरल नेटवर्क वीडियो स्ट्रीमिंग वगैरह. विंडोज़ पर इंस्टाल करने के लिए हम इस कम