2011-12-13 2 views
0

Existe-t-il un moyen de convertir un CvMat * en CvMat? Je suis coincé dans le code à un endroit où je dois cloner un CvMat en utilisant cvCloneMat(). Cela me donne CvMat * où j'en ai besoin comme un CvMat.Conversion de CvMat 8 en CvMat

J'ai essayé cette chose de déréférencement mais de toute façon cela ne fonctionne pas. J'écris un gigue/max externe qui a une matrice d'image en entrée et une matrice en sortie. voici le morceau de code

//Convert input and output matrices to OpenCV matrices 
    cvJitter2CvMat(in_matrix, &source); 
    cvJitter2CvMat(out_matrix, &edges); 

    //Calculate threshold values 
    thresh1 = x->threshold - x->range; 
    thresh2 = x->threshold + x->range; 
    CLIP(thresh1,0,255); 
    CLIP(thresh2,0,255); 



    //calculate 
    //cvCanny(&source, &edges, thresh1, thresh2, 3); 
    tempo = cvCloneMat(&source); 
    edges = (*tempo); 
} else { 
    return JIT_ERR_INVALID_PTR; 
} 

sur: jit_object_method (out_matrix, gensym ("lock"), out_savelock); jit_object_method (in_matrix, gensym ("lock"), in_savelock); return err; }

Le problème est que lorsque j'utilise "cvCanny()" au lieu de cvCloneMat() cela fonctionne. la sortie est affichée en tant que bords du flux vidéo. mais si j'utilise cvCloneMat(), il affiche une image vide.

Répondre

2

Cela est vrai pour toute substance liée pointeur:

CvMat* pMat = cvCloneMat(...); 
CvMat mat = (*pMat); 
functionThatNeedsMat(*pMat); 
otherFunctionThatNeedsMat(mat); 

Vérifiez aussi cet article sur pointer dereferencing

+0

de bien vouloir regarder la question comme il est éditée ne fonctionne pas. – Waqar

+0

Les bords sont déclarés comme CvMat et non CvMat *. Vous copiez l'en-tête de tempo sur les bords (mais pas sur les données d'image). Et c'est faux. Parce que, après que la température soit hors de portée, personne ne sait ce qui se passe. Et j'ai vu plus de CvMat inits et pas de versions. Lisez attentivement le document OpenCV et recherchez un bon didacticiel sur les pointeurs et l'utilisation de la mémoire. Prenez mon conseil gentil et commencez à apprendre C/C++ puis allez à OpenCV. Sans les fondamentaux, vous ne pouvez pas aller de l'avant. – Sam

+0

Et quand vous voulez revenir au traitement d'image mon conseil est d'utiliser l'interface C++. Avec Mat, pas CvMat. – Sam

Questions connexes