2012-06-28 9 views
0

J'ai fait une fonction dans laquelle je passe une matrice et retourne la matrice traitée, mais les données de la matrice traitée sont copiées dans la matrice que j'ai passée, par ex.les données dans une matrice sont automatiquement copiées dans une autre matrice dans opencv en C++

output=processMatrix(srcCopy); 

puis quand je montre ces deux matrice, je reçois même image dans SRCCOPY et sortie aussi, je les allouons mémoire;

output=Mat(image.rows,image.cols,CV_8UC1); 
    srcCopy=Mat(image.rows,image.cols,CV_8UC1); 
+0

peut vous montrer la déclaration et le code de la fonction 'processMatrix'? – juanchopanza

+0

'cv :: Mat squelette (cv :: Mat);' – Parimal

+0

dans processMatrix() Je libère la matrice que je passe de la main – Parimal

Répondre

2

Le problème est que le constructeur de copie cv::Mat fait une copie superficielle de la source cv::Mat. Voir here. Ce que vous devez probablement faire est d'utiliser la méthode cv::MAt::clone() pour créer un clone de l'original. Ensuite, vous pouvez éviter la copie peu profonde dans la liste des paramètres de la fonction:

cv::Mat skeletonize(const cv::Mat& m) { 
    // use clone() in here to make a new Mat and return it 
} 
0

vous pouvez utiliser Mat Mat::clone() pour créer une copie.

Mat dst= src.clone(); 
src.Release(); 

documentation de Mat Clone

Questions connexes