349 votes

Enregistrement d'un tableau Numpy en tant qu'image

J'ai une matrice dans le type d'un tableau de Numpy. Comment pourrais-je l'écrire sur le disque en tant qu'image? Tous les formats fonctionnent (png, jpeg, bmp ...). Une contrainte importante est que la LIP n'est pas présente.

356voto

migas Points 126

étant donné un tableau numpy "A":

 import Image
im = Image.fromarray(A)
im.save("your_file.jpeg")
 

vous pouvez remplacer "jpeg" par presque n'importe quel format. Plus de détails sur les formats ici

273voto

Steve Tjoa Points 15116

Peut-être que vous avez scipy:

 import scipy
scipy.misc.imsave('outfile.jpg', image_array)
 

70voto

ideasman42 Points 1682

Pur Python, un extrait de code sans les 3e partie des dépendances.

Cette fonction écrit vraie couleur RGBA PNG à l'aide de Python gzip module.

def write_png(buf, width, height):
    """ buf: must be bytes or a bytearray in py3, a regular string in py2. formatted RGBARGBA. """
    import zlib, struct

    # reverse the vertical line order and add null bytes at the start
    width_byte_4 = width * 4
    raw_data = b''.join(b'\x00' + buf[span:span + width_byte_4]
                        for span in range((height - 1) * width * 4, -1, - width_byte_4))

    def png_pack(png_tag, data):
        chunk_head = png_tag + data
        return (struct.pack("!I", len(data)) +
                chunk_head +
                struct.pack("!I", 0xFFFFFFFF & zlib.crc32(chunk_head)))

    return b''.join([
        b'\x89PNG\r\n\x1a\n',
        png_pack(b'IHDR', struct.pack("!2I5B", width, height, 8, 6, 0, 0, 0)),
        png_pack(b'IDAT', zlib.compress(raw_data, 9)),
        png_pack(b'IEND', b'')])

... Les données doivent être écrites directement dans un fichier ouvert en binaire, comme dans:

data = write_png(buf, 64, 64)
with open("my_image.png", 'wb') as fd:
    fd.write(data)

Source d'origine: https://developer.blender.org/diffusion/B/browse/master/release/bin/blender-thumbnailer.py$155

Exemple d'utilisation grâce à @Evgeni Sergeev: http://stackoverflow.com/a/21034111/432509

65voto

dF. Points 29787

Vous pouvez utiliser PyPNG . C'est un encodeur / décodeur PNG open source pur Python (sans dépendance) qui prend en charge l' écriture de tableaux NumPy sous forme d'images.

32voto

DopplerShift Points 612

Si vous avez matplotlib, vous pouvez faire:

 import matplotlib.pyplot as plt
plt.imshow(matrix) #Needs to be in row,col order
plt.savefig(filename)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X