2012-11-22 15 views
6

में ओपनसीवी लाइन का पता लगाने मैं ओपनसीवी (सी ++ में) के लिए नया हूं और मैं लाइन पहचान को लागू करने की कोशिश कर रहा हूं।सामान्य

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

+0

आपको अपनी पोस्ट में हस्ताक्षर जोड़ने की आवश्यकता नहीं है - आपका उपयोगकर्ता कार्ड स्वचालित रूप से जोड़ा जाता है। – Artemix

उत्तर

13

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

आप समानांतर रेखाओं है, का पता लगाने के लिए लाइनों

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0) 

का उपयोग जहां दूसरा पैरामीटर का पता लगाने में शामिल होंगे:

लाइनों - लाइनों के उत्पादन वेक्टर। प्रत्येक पंक्ति को दो-तत्व वेक्टर (ρ, θ) द्वारा दर्शाया जाता है। ρ समन्वय मूल (0, 0) (छवि के शीर्ष बाएं कोने) से दूरी है। θ रेडियंस में 0 रोटेशन कोण (0 ~ लंबवत रेखा, π/2 ~ क्षैतिज रेखा) है।
[opencv2refman.pdf]

इसका मतलब यह है, कि दो पंक्तियों के बीच की दूरी abs(rho1-rho2) होना चाहिए, कि दूरी lines के पहले कॉलम में पिक्सेल मूल्यों के बीच पूर्ण मतभेद हैं। (नोट: विधि CV_HOUGH_STANDARD यहाँ होना चाहिए!)

गैर समानांतर रेखाओं तुम क्या आप एक दूरी के रूप में के बारे में सोच है, लेकिन फिर OpenCV अभी भी एक का पता चला लाइन के अंतिम बिंदुओं के निर्देशांक प्रदान कर सकते हैं निर्धारित करने की है।
आपको बस method = CV_HOUGH_PROBABILISTIC का उपयोग करना होगा।

CV_HOUGH_PROBABILISTIC संभाव्य Hough को बदलने (मामले में और अधिक कुशल अगर चित्र कुछ लंबे रैखिक अनुभाग हैं)। यह पूरी लाइन के बजाय लाइन सेगमेंट देता है। प्रत्येक सेगमेंट बिंदुओं को शुरू करने और समाप्त करने के द्वारा दर्शाया गया है, और मैट्रिक्स सीवी_32SC4 प्रकार के ( निर्मित अनुक्रम) होना चाहिए।
[opencv2refman.pdf]

आप भी अपने स्थापित OpenCV के प्रलेखन के भीतर opencv_tutorials.pdf में एक ट्यूटोरियल पा सकते हैं।

+0

आपके उत्तर के लिए धन्यवाद! अगले चरण में मैं अपनी तस्वीर में लाइनों की गुणवत्ता का अनुमान प्राप्त करना चाहता हूं। रेखाएं grooving के किनारों हैं और समानांतर होना चाहिए। कई जगहों पर ग्रोइंग को क्षतिग्रस्त कर दिया गया है और किनारें समानांतर नहीं हैं। क्या सीधी रेखा से वास्तविक किनारे के विचलन को पाने का कोई आसान तरीका है? – marc

+0

हू, मुझे यकीन नहीं है। मुझे लगता है कि इसे एक अलग प्रश्न के रूप में पोस्ट करने लायक है। –

+0

क्या आप उत्तर दे सकते हैं/स्वीकार कर सकते हैं अगर मेरे उत्तर में मदद मिली? –