2009-10-20 13 views
6

me pregunto si existe una manera fácil de convertir mi imagen de matriz de flotador a iplimage, que puede ser manejado por opencv. Por supuesto, podría crear un iplimage vacío con el mismo tamaño y simplemente copiar cada píxel de mi imagen de matriz flotante a la imagen actual, pero hay una solución más elegante para esto. Tal vez un método más rápido que consuma menos memoria, ya que las imágenes de origen son bastante grandes y el proceso de copiado llevaría un tiempo.Convertir imagen de matriz flotante a un formato utilizable para opencv

Saludos,

Zhengtonic

Respuesta

3

Usted puede hacer algo como esto (suponiendo que los flotadores 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

Gracias amigo! Esto debería funcionar. :) – zhengtonic

+0

La documentación de OpenCV dice que IplImage-> imageData es de tipo char. En este ejemplo, es una matriz flotante: ¿cómo funciona eso? Además, me pregunto si los datos de la imagen son una matriz 2D o si está aplanada en 1D. – freakTheMighty

+0

@freakTheMighty Los datos se almacenan en una matriz char, pero cada 4 bytes se interpretan como un flotante. En C eso es posible :). Consulte http://www.comp.leeds.ac.uk/vision/opencv/iplimage.html para obtener una buena descripción. –

1

Usted puede llenar una estructura iplimage 'a mano' para describir la matriz siguiendo los comentarios here.

El campo imageData apuntará a su matriz original.

Pero no utilice funciones de desasignación en él. Simplemente elimine la estructura al final.

Cuestiones relacionadas