web-dev-qa-db-fra.com

Comment convertir un tableau numpy en (et afficher) une image?

J'ai créé un tableau comme suit:

import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]

Ce que je veux, c'est afficher un seul point rouge au centre d'une image 512x512. (Au moins pour commencer ... je pense pouvoir comprendre le reste à partir de là)

179
jlswint

Vous pouvez utiliser PIL pour créer (et afficher) une image:

from PIL import Image
import numpy as np

w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
data[256, 256] = [255, 0, 0]
img = Image.fromarray(data, 'RGB')
img.save('my.png')
img.show()
174
unutbu

Ce qui suit devrait fonctionner:

from matplotlib import pyplot as plt
plt.imshow(data, interpolation='nearest')
plt.show()

Si vous utilisez Jupyter notebook/lab, utilisez cette commande en ligne avant d'importer matplotlib:

%matplotlib inline 
235
Steve Tjoa

Le chemin le plus court consiste à utiliser scipy, comme ceci:

from scipy.misc import toimage
toimage(data).show()

Cela nécessite l'installation de PIL ou d'un oreiller.

Une approche similaire nécessitant également la pilule ou un oreiller mais qui peut appeler un autre spectateur est:

from scipy.misc import imshow
imshow(data)
51
Peter Hansen

En utilisant pygame , vous pouvez ouvrir une fenêtre, obtenir la surface sous forme de tableau de pixels et manipuler à votre guise. Vous devrez toutefois copier votre tableau numpy dans le tableau de surface, ce qui sera beaucoup plus lent que les opérations graphiques réelles sur les surfaces pygame elles-mêmes.

3
Stefan Kendall

Le Python Imaging Library peut afficher des images à l'aide de tableaux Numpy. Jetez un oeil sur cette page pour un exemple de code:

EDIT: Comme le note la note au bas de cette page, vous devriez vérifier les dernières notes de publication qui rendent cela beaucoup plus simple:

http://effbot.org/zone/pil-changes-116.htm

0
ars