comment faire pour convertir une image RVB en tableau numpy?
J'ai une image RVB. Je veux le convertir en tableau numpy. Je n'ai la suite
im = cv.LoadImage("abc.tiff")
a = numpy.asarray(im)
Il crée un tableau avec aucune forme. Je suppose que c'est un objet iplimage.
- Si
cv
est le OpenCV module, alors vous devriez balise en tant que tel. Ce lien peut aider: opencv.willowgarage.com/documentation/python/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser des nouvelles OpenCV python interface (si je ne me trompe pas il est disponible depuis OpenCV 2.2). Il utilise en mode natif des tableaux numpy:
résultat:
$ pip install opencv-python
pour installer opencvbrew install opencv
si vous êtes sur un MacOsTypeError: 'mode' is an invalid keyword argument for imread()
mode
argument. Voir ma réponse ci-dessous pour une mise à jour de la méthode.PIL (Python Imaging Library) et Numpy bien travailler ensemble.
- Je utiliser les fonctions suivantes.
L'Image.fromarray' est un peu moche parce que je clip données entrantes [0,255], convertir octets, puis créer une image en niveaux de gris. Je travaille principalement en gris.
Une image RVB serait quelque chose comme:
TypeError: long() argument must be a string or a number, not 'PixelAccess'
et à la recherche, à la documentation de PIL estPixelAccess
de la classe, il ne semble pas offrir des méthodes qui permettraient denp.array
de convertir ses données sous-jacentes dans unndarray
format. Vous devez omettre l'utilisation deimg.load()
et de ne traiter qu'avec le résultat deImage.open(...)
.Vous pouvez également utiliser matplotlib pour cela.
de sortie:
<class 'numpy.ndarray'>
RGB
si je ne me trompe pasRéponse tardive, mais j'en suis venu à préférer la
imageio
module à l'autre des alternativesSimilaire à
cv2.imread()
, il produit un tableau numpy par défaut, mais en RVB forme.Vous devez utiliser le cv.LoadImageM au lieu de cv.LoadImage:
Lors de l'utilisation de la réponse de David Poole-je obtenir un SystemError avec une échelle de gris Png et peut-être d'autres fichiers. Ma solution est:
Effectivement img.getdata() pourrait fonctionner pour tous les fichiers, mais il est plus lent, donc je ne l'utilise que lorsque l'autre méthode échoue.
À compter d'aujourd'hui, votre meilleur pari est d'utiliser:
Vous verrez
img
sera un tableau numpy de type:J'ai aussi adopté imageio, mais j'ai trouvé le mécanisme suivant utiles pour le pré - et le post-traitement:
La raison en est que je suis en utilisant numpy pour le traitement de l'image, et pas seulement l'image de l'affichage. À cette fin, uint8s sont difficiles à faire, donc je convertir des valeurs à virgule flottante allant de 0 à 1.
Lors de l'enregistrement d'images, j'ai remarqué que j'ai dû couper les valeurs de la plage de moi-même, ou alors j'ai vraiment gris de sortie. (Le gris de sortie a été le résultat de imageio de la compression de la gamme complète, qui était en dehors de [0, 256), à des valeurs qui ont été à l'intérieur de la gamme.)
Il y avait un couple d'autres bizarreries, trop, comme je l'ai dit dans les commentaires.