2011-11-18 20 views
11

मैं है एक समारोह के शीर्ष पर प्रारंभ निम्नलिखित के साथ करने के लिए एक 0 मैट्रिक्स चटाई सूचक प्रारंभ करने में:कैसे सही ढंग से एक सीवी :: शून्य()

cv::Mat *m; 

फिर, एक पाश के भीतर मैं नए मैट्रिक्स का आवंटन कर रहा हूँ इस नाम के साथ और उन्हें एक सूची में संग्रहित। मैं चाहता हूं कि वे एक विशिष्ट आकार के साथ शून्य मैट्रिक्स के रूप में प्रारंभ करें।

यह है कि मैं क्या करने की कोशिश की है:

m = new cv::Mat::zeros(height, width, CV_32F); 

मैं OpenCV दस्तावेज में दिए गए उदाहरण के आधार पर यह कोशिश की। इस ऑपरेशन को करने का सही तरीका क्या है?

+0

डॉक्स के अनुसार चाहते हैं तो आप इसे इस तरह से कर सकते हैं ' सीवी :: मैट एम = सीवी :: मैट :: शून्य (ऊंचाई, चौड़ाई, सीवी_32 एफ); '। http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html#cv-mat-zeros – detunized

उत्तर

19

Mat::zeros के प्रलेखन से यह इतना

cv::Mat m = cv::Mat::zeros(height, width, CV_32F); 

की तरह इस्तेमाल किया उपयोग आप एक Mat ढेर पर आवंटित उपयोग करने के लिए उपयोग करें

cv::Mat * m = new cv::Mat(cv::Mat::zeros(height, width, CV_32F)); 

// use m 

delete m; // don't forget to delete m 
+8

यदि मुझे गलत नहीं लगता है, तो आम तौर पर सीवी :: मैट को ढेर पर आवंटित करना एक बुरा विचार है? सीवी :: मैट स्ट्रक्चर आंतरिक रूप से अपने छवि डेटा में एक हीप पॉइंटर का उपयोग करता है, इसलिए यह ढेर पर जगह नहीं लेगा। यह आंतरिक रूप से संदर्भ गणना का उपयोग करता है, और इसकी रेफरी गिनती शून्य के बराबर होने पर खुद को हटा देगा। – escapecharacter

+2

ज्यादातर मामलों में, ढेर पर मैट आवंटित करना एक बुरा विचार है। –

+0

ऐसा लगता है कि 'ज़ीरोस प्रारंभिक ढेर पर भी काम नहीं करता है। –

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