2011-11-18 15 views
11

Ho il seguente inizializzate nella parte superiore di una funzione:Come inizializzare correttamente un cv :: puntatore Mat ad una matrice di zeri 0()

cv::Mat *m; 

Poi, all'interno di un ciclo sto ripartizione nuove matrici con questo nome e memorizzandoli in una lista. Voglio che inizializzino come matrici zero con una dimensione specifica.

Questo è quello che ho provato:

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

Ho provato questo sulla base l'esempio dato nella documentazione OpenCV. Qual è il modo corretto per eseguire questa operazione?

+0

Secondo la documentazione si può fare in questo modo ' cv :: Mat m = cv :: Mat :: zeros (altezza, larghezza, CV_32F); '. http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html#cv-mat-zeros – detunized

risposta

19

Dalla documentazione di Mat::zeros esso uso utilizzato in questo modo

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

Se si desidera utilizzare un Mat allocato sul mucchio utilizzare

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

// use m 

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

Se non sbaglio, è generalmente una cattiva idea allocare cv :: Mat sull'heap? La struttura cv :: Mat utilizza un puntatore dell'heap ai suoi dati dell'immagine internamente, quindi non occupa spazio sullo stack. Usa internamente il conteggio dei riferimenti e si cancellerà una volta che il suo conteggio ref è uguale a zero. – escapecharacter

+2

Nella maggior parte dei casi, allocare Mat sull'heap è una cattiva idea. –

+0

Sembra che l'inizializzazione ':: zeros' non funzioni nemmeno sull'heap. –

Problemi correlati