Para responder a la segunda pregunta, especialmente de Surya:
THB, la documentación sobre OpenCV no es la mejor. Aquí el enlace al tipo más nuevo: cv :: Mat http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat Los tipos más nuevos son más modernos que c estilo C++.
Aquí dos respuestas más foro OpenCV con un tema similar: http://answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/ y http://www.answers.opencv.org/question/13437/difference-between-cvmat-cvmat-cvmat-and-mat/
Sobre todo por el problema de la conversión (como juanchopanza mencionado):
cv::Mat mat = cv::Mat(10, 10, CV_32FC1); //CV_32FC1 equals float
//(reads 32bit floating-point 1 channel)
CvMat cvMat = mat;
o con
using namespace cv; //this should be in the beginning where you include
Mat mat = Mat(10, 10, CV_32FC1);
CvMat cvMat = mat;
Nota: Por lo general, probablemente trabaje con CvMat*
, pero debe pensar sobre cambiar completamente a los tipos más nuevos. Ejemplo (tomado de mi segundo link):
CvMat* A = cvCreateMat(10, 10, CV_32F); //guess this works fine with no channels too
Cambio int flotar:
CvMat* A = cvCreateMat(10, 10, CV_16SC1);
//Feed A with data
CvMat* B = cvCreateMat(10, 10, CV_32FC1);
for(int i=0; i<10; ++i)
for(int i=0; i<10; ++i)
CV_MAT_ELEM(*A, float, i, j) = (float) cvmGet(B, i, j);
//Don't forget this unless you want to produce a memory leak.
cvReleaseMat(&A);
cvReleaseMat(&B);
Los dos primeros ejemplos (sin el puntero) están bien como que, como el CvMat se lleva a cabo en el montón entonces . cvCreateMat(...)
asigna memoria que tiene que liberar por su cuenta más tarde. Otra razón para usar cv::Mat
.
@ Gracias juanchopanza, ¿Puede proporcionar el enlace relacionado con las operaciones anteriores? y cómo puedo convertir mis tipos de datos en CvMat. Tengo los datos en mi CvMat es un número entero, ahora tengo que cambiar eso para flotar, ¿cómo puedo hacer eso? – surya