Lorsque nous avons un IplImage, comment pouvons-nous l'enregistrer pour que nous puissions l'utiliser plus tard, ou l'afficher en tant qu'image en dehors de notre code (comme via png, ou jpeg)?Comment enregistrer une image IplImage?
Comme un exemple de code, je donne les résultats suivants:
void SaveImage()
{
CvSize size;
IplImage *rgb_img;
int i = 0;
size.height = HEIGHT;
size.width = WIDTH;
rgb_img = cvCreateImageHeader(size, IPL_DEPTH_8U, 3);
rgb_img->imageData = my_device.ColorBuffer;
rgb_img->imageDataOrigin = rgb_img->imageData;
/*for (i = 2; i < rgb_img->imageSize; i+= 3)
{
// confirming all values print correctly
printf("%d, ", rgb_img->imageData[i]);
}*/
cvSaveImage("foo.png",rgb_img);
}
J'imprimé toutes les valeurs dans la boucle en commentaire, et il semble que les données dans la mémoire tampon correctement. L'utilisation de cvShowImage pour afficher l'image fonctionne également correctement, il semble donc que la structure de l'image est correcte.
Si vous avez une image à 3 canaux (IPL_DEPTH_8U, 3), comment est-ce que l'impression du premier canal comme dans votre boucle for vous montre toutes les valeurs dans votre tampon? –
C'est un bon point. Je faisais des tests pour m'assurer que l'affectation rgb_img-> imageData n'échouait pas. – vapo
Cependant, maintenant que vous l'avez mentionné, il y a plusieurs valeurs négatives dans l'imageData. Cela ne semble pas possible. Aucune des valeurs dans ColorBuffer sont négatives (je viens de cocher) – vapo