Per rispondere seconda domanda in particolare di Surya:
THB, la documentazione sul OpenCV non è il migliore. Qui il link al nuovo tipo: cv :: Mat http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat I nuovi tipi sono più moderni di C++ come lo stile c.
Qui due risposte più OpenCV forum con un argomento simile: http://answers.opencv.org/question/65224/conversion-between-cvmat-and-cvmat/ e http://www.answers.opencv.org/question/13437/difference-between-cvmat-cvmat-cvmat-and-mat/
Soprattutto per il problema di conversione (come juanchopanza menzionato):
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: solitamente lavorerai con CvMat*
- ma dovresti pensare riguardo al passaggio ai nuovi tipi completamente. Esempio (preso dal mio secondo link):
CvMat* A = cvCreateMat(10, 10, CV_32F); //guess this works fine with no channels too
Modifica int galleggiare:
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);
I primi due esempi (sul puntatore) sono bene così come CvMat è tenuto sul mucchio allora . cvCreateMat(...)
alloca la memoria che devi liberare da solo in seguito. Un altro motivo per utilizzare cv::Mat
.
@ Grazie juanchopanza, puoi fornire il collegamento relativo alle operazioni di cui sopra. e come posso convertire i miei tipi di dati in CvMat. Ho i dati nel mio CvMat è intero, ora devo cambiarlo per farlo galleggiare, come posso farlo? – surya