2012-09-05 3 views
3

Je souhaite afficher un tableau 2d num (512, 512) de uint16 avec PIL. Si je l'ai écrit une fonction:Afficher un tableau numérique avec PIL

def display_PIL(nparray): 
    image = Image.fromarray(nparray) 
    image.show() 

Je reçois un message d'erreur:

ne peut pas gérer ce type de données.

Mais si j'ajoute:

def display_PIL(nparray): 
    image = Image.fromarray(nparray,'L') 
    image.show() 

il affiche l'image, mais je ne le quart supérieur droit de l'image. Y a-t-il une solution pour avoir l'image complète? Où puis-je trouver des informations concernant l'option L et d'autres options?

+1

Ceci est légèrement hors sujet, mais si vous voulez tracer des valeurs dans un tableau, pourquoi ne pas utiliser matplotlib? Il est conçu pour autoriser de nombreux types de tracés et prend directement en charge les tableaux numpy. – abought

+0

Le type ''L'' 'est strictement 8-bit donc vous devriez utiliser''I; 16'' à la place. Voir http://www.pythonware.com/library/pil/handbook/concepts.htm –

+0

Matplotlib est un outil très puissant pour l'affichage de petits ensembles de données. Dans mes cas, j'ai un tableau 2d de plus de (100 000, 100 000) valeurs où Matplotlib n'est pas très puissant. Idéalement, je m'attendrais à ce qu'un outil dépende de la résolution de l'écran (en faisant la moyenne de la région du tableau pour afficher sur chaque pixel affiché sur l'écran) où un zoom recalcule la zone d'affichage à afficher. Mais un tel outil n'existe apparemment pas. – user1187727

Répondre

1

La question est résolue en utilisant l'option 'I; 16' dans la fonction Image.fromarray. Merci beaucoup.