2010-05-04 5 views
1

J'ai une boucle qui traverse une vidéo avec quelques traitements/calculs des images. Je veux enregistrer l'image dans la boucle avec la valeur la plus élevée du traitement, mais je me bats un peu avec le stockage temporaire de l'image pendant que la boucle se termine.Stockage d'images et de pointeurs dans OpenCV

Les images/cadres sont initialisés comme celui-ci

IplImage* frame = 0; 
IplImage* maxframe = 0; 

Tout en bouclant le MAXFRAMDE se trouve par

if(currentvalue > maxvalue) { 
    maxvalue = currentvalue; 
    maxframe = frame; 
} 

Je suis conscient que ce que je stocke dans la variable MAXFRAMDE est le même pointeur à l'image actuellement chargée dans le pointeur de trame. Quand une nouvelle image est chargée dans la variable frame, elle sera également pointée par le pointeur maxframe. Donc, quand je sauvegarde l'image pointée par maxframe, je sauvegarde la dernière image dans la boucle, quelle que soit sa valeur calculée.

J'ai essayé beaucoup de solutions différentes, mais je n'arrive pas à résoudre ce problème. Quelqu'un peut-il m'aider? :)

Répondre

1

probablement le cadre IplImage * est recyclé par le système de référence interne OpenCv. Avez-vous essayé de faire une copie profonde de l'image, en utilisant IplImage * cvCloneImage (const IplImage * image)? Par ailleurs, avec openCv 2.0 et supérieur, il est préférable d'utiliser un cvMat (ou cv :: Mat) pour stocker des images ... Utilisez ensuite l'image cv :: Mat, puis image.clone();

+0

Merci, ça a marché! Je vais regarder dans la mise à jour de mon code pour les versions ultérieures plus tard .. C'est le problème avec l'utilisation des anciens exemples. ;) – BackstreetStruts