C'est mon code
from PIL import Image
pil_im = Image.open('data/empire.jpg')
Je voudrais faire quelques manipulations d’images dessus, puis les montrer à l’écran.
J'ai du mal à afficher PIL Image dans un cahier python
J'ai essayé:
print pil_im
Et juste
pil_im
Mais les deux me donnent juste:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=569x800 at 0x10ECA0710>
Vous pouvez utiliser le Module: display
d'IPython pour charger l'image. Vous pouvez en lire plus sur the Doc .
from IPython.display import Image
Image(filename='data/empire.jpg')
Comme OP a pour exigence d'utiliser PIL
, si vous souhaitez afficher une image en ligne, vous pouvez utiliser matplotlib.pyplot.imshow
avec numpy.asarray
comme ceci:
from matplotlib.pyplot import imshow
import numpy as np
from PIL import Image
%matplotlib inline
pil_im = Image.open('data/empire.jpg', 'r')
imshow(np.asarray(pil_im))
Si vous avez seulement besoin d'un aperçu plutôt que d'une ligne, vous pouvez simplement utiliser show
comme ceci:
pil_im = Image.open('data/empire.jpg', 'r')
pil_im.show()
J'ai trouvé que ça marche
# source: http://nbviewer.ipython.org/Gist/deeplook/5162445
from io import BytesIO
from IPython import display
from PIL import Image
def display_pil_image(im):
"""Displayhook function for PIL Images, rendered as PNG."""
b = BytesIO()
im.save(b, format='png')
data = b.getvalue()
ip_img = display.Image(data=data, format='png', embed=True)
return ip_img._repr_png_()
# register display func with PNG formatter:
png_formatter = get_ipython().display_formatter.formatters['image/png']
dpi = png_formatter.for_type(Image.Image, display_pil_image)
Après cela, je peux juste faire:
pil_im
Mais ceci doit être la dernière ligne de la cellule, sans print
après
cas python3
from PIL import Image
from IPython.display import HTML
from io import BytesIO
from base64 import b64encode
pil_im = Image.open('data/empire.jpg')
b = BytesIO()
pil_im.save(b, format='png')
HTML("<img src='data:image/png;base64,{0}'/>".format(b64encode(b.getvalue()).decode('utf-8')))
Utilisez l'affichage IPython pour afficher les images PIL dans un cahier.
from PIL import Image # to load images
from IPython.display import display # to display images
pil_im = Image.open('path/to/image.jpg')
display(pil_im)
Si vous utilisez l'extension pylab, vous pouvez convertir l'image en un tableau numpy et utiliser imshow de matplotlib.
%pylab # only if not started with the --pylab option
imshow(array(pil_im))
EDIT: Comme mentionné dans les commentaires, le module pylab est obsolète, utilisez plutôt la magie matplotlib et importez la fonction explicitement:
%matplotlib
from matplotlib.pyplot import imshow
imshow(array(pil_im))
Vous pouvez ouvrir une image à l'aide de la classe Image du paquet PIL et l'afficher directement avec plt.imshow.
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
img = Image.open(<path_to_image>)
plt.imshow(img)
Sur la base d’autres réponses et de mes essais, la meilleure expérience serait d’abord d’installer, pillow et scipy, puis d’utiliser le code de départ suivant sur votre notebook jupyter:
%matplotlib inline
from matplotlib.pyplot import imshow
from scipy.misc import imread
imshow(imread('image.jpg', 1))
Une version plus propre de Python3 qui utilise la norme numpy, matplotlib et PIL Fusion de la réponse pour l'ouverture à partir d'une URL.
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
pil_im = Image.open('image.jpg')
## Uncomment to open from URL
#import requests
#r = requests.get('https://www.vegvesen.no/public/webkamera/kamera?id=131206')
#pil_im = Image.open(BytesIO(r.content))
im_array = np.asarray(pil_im)
plt.imshow(im_array)
plt.show()