2 votos

¿Cómo convertir un array de píxeles en jpg o png?

Estoy haciendo un proyecto de procesamiento de imágenes en VHDL. Y como salida estoy obteniendo una matriz de píxeles (32 bits cada uno). Quiero probar estos datos de salida visualmente, para ello debe ser convertido a la imagen ya sea png o jpg o bmp. ¿Cómo puedo hacer eso?

Edición: O si estoy obteniendo los mismos datos en cuatro archivos diferentes como alfa, rojo, verde y azul en a.txt, r.txt, g.txt y b.txt respectivamente. ¿Esto facilita la obtención de la imagen?

3voto

George Puntos 487

¿Qué pasa con los núcleos abiertos? codificador jpg ?

2voto

robertkroll Puntos 1432

Escribir los datos de la imagen en formato ascii PPM es fácil: http://en.wikipedia.org/wiki/Netpbm_format#PPM_example Muchos visores de imágenes entienden ese formato, por ejemplo Irfanview.

También hay un formato más complejo que soporta 32bit con canal alfa: http://en.wikipedia.org/wiki/Netpbm#PAM_graphics_format

Así que al menos tienes que crear el encabezado correcto delante de tus datos. El paquete netpbm ofrece algunas herramientas de conversión en línea de comandos: pamtotiff, pamtopnm, pamtojpeg2k,...

En el pasado utilicé a menudo ese formato ppm para los bancos de pruebas...

1voto

user35526 Puntos 11

Hay, probablemente, muchas maneras de hacer esto, pero si usted puede utilizar Matlab, esto no debería ser demasiado difícil. Hace mucho tiempo que lo usé, así que no recuerdo los detalles, pero el enfoque general es el siguiente:

En primer lugar, tienes que leer los valores del archivo .txt en tu espacio de trabajo. Crea cuatro matrices de igual tamaño y carga cada una de ellas con datos alfa, rojo, azul y verde respectivamente. Tendrás que escribir una pequeña función para copiar los datos de la matriz txt. No puedo decirte cómo, porque no sé cómo se almacenan los datos en el archivo .txt.

Hay diferentes maneras de mostrar imágenes en Matlab. Consulta el archivo de ayuda sobre cómo crear una imagen RGB a partir de sus componentes. Hay una función incorporada que lo hará por usted (concatenación). Así, cuando tienes matrices/canales R G B separados (de igual tamaño), puedes concatenarlos a través de la tercera dimensión:

  im = cat(3,R,G,B);

A continuación, puede utilizar estas funciones (y otras) para mostrar la imagen:

  imshow(im)
  imagesc(im)

No sé cómo se aplica el canal alfa a la imagen RGB. Lee algunos documentos al respecto. Tal vez usted no lo necesita.

En cualquier caso, puedes editar fácilmente los datos de las matrices para que sean aceptados para la creación de imágenes.

Una vez que tenga los canales puede crear y guardar la imagen en una variedad de formatos de imagen comunes que son soportados por Matlab, incluyendo .jpg y .png.

0voto

Rob Lachlan Puntos 7880

Inserte el código VHDL en su banco de pruebas para escribir la trama cruda en un archivo. A continuación, utiliza un codificador/compresor jpeg para generar el jpg, y finalmente ábrelo con tu visor de imágenes favorito.

Puedo dar fe de esto (bien llamado) compresor jpeg .

Su uso no puede ser más fácil:

// Writes JPEG image to a file. 
// num_channels must be 1 (Y), 3 (RGB), or 4 (RGBA), image pitch must be width*num_channels.
bool compress_image_to_jpeg_file(const char *pFilename, 
                                 int width, int height, 
                                 int num_channels, 
                                 const uint8 *pImage_data, 
                                 const params &comp_params = params());

Sólo tienes que escribir un pequeño programa en C++ que llame a esta función. Hace unos años lo implementé en Nios II para guardar (y posteriormente cargar) instantáneas de vídeo en directo, y funcionó bien. Lento, sí, pero seguro.

0voto

RelaXNow Puntos 1164

Básicamente, se quiere interpretar una matriz de datos de píxeles en bruto como una imagen. Puedes usar mi mecanismo de archivo de imagen INF para eso. Creas un archivo de texto que contiene comandos para el lector INF para explicar dónde están los datos de píxeles en la matriz cruda.

Varias utilidades de manipulación de imágenes, que incluyen el controlador de archivos INF, deberían incluirse en mi versión Full Runtime en http://www.embedinc.com/pic/dload.htm . Después de instalarlo, los archivos de documentación estarán en el directorio DOC dentro de donde hayas instalado el software. En particular, mira el archivo doc INF para ver si esto hará lo que quieres.

Los programas de manipulación de imágenes suelen llamarse IMAGE_xxx, con los correspondientes archivos doc en el directorio DOC. Si configura bien el archivo INF, IMAGE_COPY podrá convertir sus datos de píxeles en un archivo JPG, o en otros formatos de archivo. Los formatos de archivo admitidos se enumeran en el archivo doc IMAGE_TYPES. También puede utilizar IMAGE_DISP o IMAGE_EDIT para ver la imagen directamente sin que se convierta primero a un formato de archivo estándar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X