2011-11-18 82 views
11

我有以下的在功能上初始化爲零():如何正確初始化CV ::墊指針爲0矩陣

cv::Mat *m; 

然後,在循環中,我分配新的矩陣與這個名字並將它們存儲在一個列表中。我希望他們初始化爲具有特定大小的零矩陣。

這是我的嘗試:

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

我想這基於OpenCV的文檔中給出的例子。執行此操作的正確方法是什麼?

+0

根據該文檔,你可以做這樣的' cv :: Mat m = cv :: Mat :: zeros(height,width,CV_32F);'。 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

如果我沒有弄錯,在堆上分配cv :: Mat通常是個壞主意? cv :: Mat結構在內部使用一個指向其圖像數據的堆指針,所以它不會佔用堆棧上的空間。它在內部使用引用計數,一旦其引用計數等於零,就會自行刪除。 – escapecharacter

+2

在大多數情況下,在堆上分配Mat是個壞主意。 –

+0

似乎':: zeros'初始化甚至不能在堆上工作。 –