2009-10-20 7 views
6

Je me demande s'il existe un moyen facile de convertir mon image de tableau flottant en iplimage, qui peut être géré par opencv. Bien sûr, je pourrais créer un iplimage vide avec la même taille et simplement copier un pixel de mon image flottante vers l'iplimage emplty, mais y at-il une solution plus élégante à cela. Peut-être une méthode plus rapide consommant moins de mémoire, puisque les images sources sont assez volumineuses et que le processus de copie prendrait du temps.Convertir l'image de tableau flottant dans un format utilisable pour opencv

Meilleures salutations,

Zhengtonic

Répondre

3

Vous pouvez faire quelque chose comme ça (en supposant des flotteurs 32 bits):

float* my_float_image_data; 

CvSize size; 
size.height = height ; 
size.width = width; 
IplImage* ipl_image_p = cvCreateImageHeader(size, IPL_DEPTH_32F, 1); 
ipl_image_p->imageData = my_float_image_data; 
ipl_image_p->imageDataOrigin = ipl_image_p->imageData; 
+0

Merci pal! Cela devrait fonctionner. :) – zhengtonic

+0

La documentation OpenCV indique que IplImage-> imageData est de type char. Dans cet exemple, c'est un tableau flottant - comment cela fonctionne-t-il? Aussi, je me demande, si les données de l'image est un tableau 2D ou si elle est aplatie dans 1D? – freakTheMighty

+0

@freakTheMighty Les données sont stockées dans un tableau char, mais tous les 4 octets sont interprétés comme un seul flottant. En C c'est possible :). Voir http://www.comp.leeds.ac.uk/vision/opencv/iplimage.html pour une bonne description. –

1

Vous pouvez remplir une structure iplimage 'à la main' pour décrire votre tableau suivant les commentaires here.

Le champ imageData pointera sur votre tableau d'origine.

Mais n'utilisez pas les fonctions de désallocation. Il suffit de supprimer la structure à la fin.

Questions connexes