J'ai une image simple blanche et blanche uniquement GIF (400x400px disons).
J'ai besoin d'obtenir tous les pixels de cette image et de trouver s'ils sont noirs ou blancs. J'ai besoin de créer un dictionnaire avec les informations sur les pixels et leurs couleurs alors. P>
Je suis assez nouveau à Python, donc je suis un peu en difficulté avec cela. Mais voici mon script jusqu'à présent: p> essentiellement je veux que le dictionnaire final soit quelque chose comme ceci: p> Edit: P> Quand j'essaie: P> Traceback (most recent call last):
File "D:\python-projects\backprop.py", line 15, in <module>
print aImage[0, 0]
File "C:\Python26\lib\site-packages\pil-1.1.7-py2.6-win32.egg\Image.py", line
512, in __getattr__
raise AttributeError(name)
AttributeError: __getitem__
5 Réponses :
Essayez:
pix = aImage.load() print pix[x, y]
@Richard: utilisez-vous une ancienne version de PIL? pythonware.com/library/pil/handbook/image.htm dit Cela fonctionnera dans PIL 1.1.6+
@Richard: corrigé. L'accès avec cette méthode est beaucoup plus rapide que GetPixel et Putpixel.
@Brian: Il y avait une erreur dans le code de l'échantillon avant l'édition.
êtes-vous sûr em> vous voulez faire cela? Il serait horriblement inefficace d'utiliser un dictionnaire pour stocker ces données. P>
Je penserais qu'une matrice numpy serait beaucoup plus appropriée ... p>
Ceci est juste une petite image (400x400 pixels), donc je ne pense pas que cela compte. Mais je pourrais refroidir le code une fois que je reçois tout ce que j'ai besoin de travailler afin qu'il soit plus efficace.
Vous devez utiliser Voir
http://effbot.org/imagingbook/image.htm
. p>
blockQuote> getpixel code> plutôt que d'utiliser des opérateurs d'indexation. Notez que cela peut être très lent. Vous feriez mieux d'utiliser
getdata code>, qui renvoie tous les pixels en tant que séquence. P>
Je ne pense pas que cette information est correcte. Accès via l'objet renvoyé par image.Open () est beaucoup plus rapide que GetPixel et Putpixel.
@Paulo: Mon point était qu'il devait utiliser getpixel code> car l'indexation ne compilerait pas avec son code, et non qu'il devrait utiliser
getpixel code> en général. Comme mon message dit,
getpixel code> est lent. Cependant, je pense que
getdata code> et indexation sont probablement également appropriés d'une perspective d'efficacité.
Si vous vouliez voir si un pouce était mono, vous pouvez essayer ceci: -
True False
Si vous pouvez vous assurer que votre image est en mode noir et blanc, vous pouvez faire: ceci utilise le vérifier que getpixel code> mentionné dans d'autres réponses et la
(x, y) code> p>
getpixel code> renvoie-y et zéros em> p> p>
Vous ne pouvez pas utiliser d'indexation de cette manière que si vous utilisez
charge code>. Voir les réponses de Paulo et peut commenter dessus.
Le dictionnaire que vous voulez existe déjà .. comme le
AIMAGE code> struct. juste faire
aimage.getpixexl ((0,0)) == (255.255.255) code>.