2011-11-18 44 views
11

Tengo el siguiente inicializados en la parte superior de una función:Cómo iniciar correctamente un cv :: Mat puntero a una matriz de ceros (0) con

cv::Mat *m; 

Luego, dentro de un bucle estoy asignación de nuevas matrices con este nombre y almacenándolos en una lista. Quiero que se inicialicen como matrices cero con un tamaño específico.

Esto es lo que he intentado:

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

yo probamos este basado en el ejemplo dado en la documentación OpenCV. ¿Cuál es la forma correcta de realizar esta operación?

+0

De acuerdo con la documentación que puede hacerlo de esta ' cv :: Mat m = cv :: Mat :: ceros (alto, ancho, CV_32F); '. http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html#cv-mat-zeros – detunized

Respuesta

19

De la documentación de Mat::zeros que usar utilizarse como tal

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

Si desea utilizar un Mat asignada en el montón usar

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

// use m 

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

Si no me equivoco, generalmente es una mala idea asignar cv :: Mat's en el montón? La estructura cv :: Mat utiliza un puntero de pila para sus datos de imagen internamente, por lo que no ocupará espacio en la pila. Utiliza el recuento de referencias internamente, y se eliminará una vez que su recuento de ref es igual a cero. – escapecharacter

+2

En la mayoría de los casos, asignar Mat en el montón es una mala idea. –

+0

Parece que la inicialización de ':: ceros' ni siquiera funciona en el montón. –

Cuestiones relacionadas