2012-08-02 23 views
7

मैं ओपनसीवी फ़ंक्शन MinAreaRect2 को पायथन के भीतर से कॉल करने का प्रयास कर रहा हूं। मैं ओपनसीवी 2.4.2 का उपयोग पायथन 2.7 और numpy 1.6 के साथ करता हूं। मैं इतनी दूर चला गया:पायथन ओपनसीवी बॉक्स 2 डी

import cv 

def nda2ipl(arr, dtype=None): 
    return cv.fromarray(np.ascontiguousarray(arr, dtype=dtype)) 

def min_area_rect2(points): 
    storage = cv.CreateMemStorage() 
    cv_points = nda2ipl(points.reshape((-1, 1, 2))) 
    out = cv.MinAreaRect2(cv_points, storage) 
return out 

मैं आकार का एक ndarray के साथ इस समारोह कॉल कर सकते हैं (एन एक्स 2)।

((476.5, 604.5), (951.0, 1207.0), -0.0) 

मुझे लगता है कि पहले टपल बॉक्स के केंद्र है, दूसरा चौड़ाई और ऊंचाई देता है और पिछले कोण है: मैं परिणामों के इस प्रकार मिलता है।

समस्या यह है कि मुझे यह स्पष्ट संदर्भ नहीं मिल सका। असल में, ओपनसीवी दस्तावेज मुझे बताता है कि पाइथन में फ़ंक्शन क्या लौटाता है।

मुझे official documentation about this function मिला लेकिन यह बहुत उपयोगी नहीं है।

पायथन में MinAreaRect2 का वास्तव में आउटपुट क्या है? अधिक आम तौर पर, आप ओपनसीवी पायथन रैपर के बारे में सटीक दस्तावेज़ीकरण कहां प्राप्त करते हैं?

उत्तर

11

OpenCV अजगर आवरण प्रलेखन एक ही साइट में सामान्य प्रलेखन के साथ रखा जाता है, www.docs.opencv.org इस्तेमाल किया

इससे पहले पायथन मॉड्यूल cv इंटरफ़ेस है, जो मूल सी से देशी डेटा प्रकार इस्तेमाल किया cvMat तरह ++ इंटरफेस था, cvSeq आदि

बाद में इसे अधिक बेहतर, उन्नत और सरल मॉड्यूल cv2 इंटरफ़ेस में स्थानांतरित कर दिया गया। इसमें, सब कुछ या तो अम्पी सरणी या देशी पायथन डेटा प्रकार के रूप में वापस आ जाता है।

यहां, टुपल लौटाया गया है cvBox2D के समान तर्क हैं। आप यहां विभिन्न पायथन रैपरों के बीच अंतरों का अधिक विवरण प्राप्त कर सकते हैं: What is different between all these OpenCV Python interfaces?

यहां, आपकी धारणा सही है। उन मानों को बिल्कुल निर्दिष्ट किया गया है जो आपने उल्लेख किया था।

यदि आप घूर्णन वाले रेक्ट को आकर्षित करना चाहते हैं, तो आपको आयत के 4 कोने की आवश्यकता है। के लिए, आप एक समारोह जो दस्तावेज में कभी नहीं देखा गया है की जरूरत है, यानी cv2.cv.BoxPoints() (लेकिन चिंता मत करो, यह जब OpenCV 2.4.3 जारी किया गया है दस्तावेज में नहीं होगा।)

आप इस लेख में घुमाया आयत बनाने के लिए पर एक उदाहरण देख सकते हैं: Rotated Rectangle

enter image description here

+0

आपकी मदद के लिए धन्यवाद! –

+1

किसी भी तरह निराशाजनक, ऐसा लगता है कि उनके पास [स्थगित] (http://code.opencv.org/issues/2023) दस्तावेज में बॉक्सपॉइंट जोड़ने के लिए आपका अनुरोध है, ओपनसीवी 3.0 तक –

1

के रूप में दस्तावेज में कहा गया है जो आप लिंक करने के लिए, MinAreaRect2 एक Box2D object रिटर्न:

एक CvBox2D वस्तु के रूप में वर्णित here, इसके केंद्र, आकार और कोण से परिभाषित किया गया है के रूप में आप सही ढंग से ग्रहण किया।

आम तौर पर, पाइथन रैपर का प्रलेखन खराब है। आपकी सबसे अच्छी शर्त सी ++ दस्तावेज़ीकरण और स्रोत कोड को पढ़ने के लिए है।

+1

अपने जवाब के लिए धन्यवाद। लेकिन पाइथन फ़ंक्शन एक बॉक्स 2 डी ऑब्जेक्ट नहीं देता है लेकिन एक अजगर ट्यूपल। तो मैंने tuple तत्वों और सी ++ Box2D संरचना के बीच संबंध के बारे में सोचा।मैंने सोर्स कोड को देखने की कोशिश की लेकिन मुझे कोई जगह नहीं मिली जो मुझे जवाब दे सके। मुझे समझ में कठिनाई है कि ओपनसीवी लाइब्रेरी को वास्तव में पाइथन में कैसे लपेटा जाता है। इसके बारे में कोई संकेत बहुत स्वागत किया जाएगा। –

+0

मुझे यह पोस्ट काफी स्पष्टीकरण मिला: http://opencvpython.blogspot.com.es/2012/06/contours-2-brotherhood.html – Antoni

संबंधित मुद्दे