Das ist mein Code
from PIL import Image
pil_im = Image.open('data/empire.jpg')
Ich möchte einige Bildmanipulationen daran vornehmen und sie dann auf dem Bildschirm zeigen.
Ich habe Probleme mit dem Anzeigen von PIL-Bild in einem Python-Notebook.
Ich habe versucht:
print pil_im
Und nur
pil_im
Aber beide geben mir einfach:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=569x800 at 0x10ECA0710>
Sie können das Image mit IPython Module: display
laden. Sie können mehr aus dem Doc lesen.
from IPython.display import Image
Image(filename='data/empire.jpg')
Da die Anforderung von OP die Verwendung von PIL
ist, können Sie matplotlib.pyplot.imshow
mit numpy.asarray
folgendermaßen verwenden, wenn Sie ein Inline-Bild anzeigen möchten:
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))
Wenn Sie nur eine Vorschau und keine Inline benötigen, können Sie show
wie folgt verwenden:
pil_im = Image.open('data/empire.jpg', 'r')
pil_im.show()
Ich habe festgestellt, dass dies funktioniert
# 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)
Danach kann ich einfach tun:
pil_im
Dies muss jedoch die letzte Zeile in der Zelle sein, ohne print
fall 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')))
Verwenden Sie die IPython-Anzeige, um PIL-Bilder in einem Notebook zu rendern.
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)
Wenn Sie die Pylab-Erweiterung verwenden, können Sie das Bild in ein numpy-Array konvertieren und die imshow von matplotlib verwenden.
%pylab # only if not started with the --pylab option
imshow(array(pil_im))
EDIT: Wie in den Kommentaren erwähnt, ist das Pylab-Modul veraltet, verwenden Sie stattdessen die Matplotlib-Magie und importieren Sie die Funktion explizit:
%matplotlib
from matplotlib.pyplot import imshow
imshow(array(pil_im))
Sie können ein Bild mit der Image-Klasse aus dem Paket PIL öffnen und es mit plt.imshow direkt anzeigen.
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
img = Image.open(<path_to_image>)
plt.imshow(img)
Basierend auf anderen Antworten und meinen Versuchen würde die beste Erfahrung zunächst die Installation von pillow und scipy und dann die Verwendung des folgenden Startcodes auf Ihrem jupyter-Notebook sein:
%matplotlib inline
from matplotlib.pyplot import imshow
from scipy.misc import imread
imshow(imread('image.jpg', 1))
Eine saubere Python3-Version, die Standard-Numpy, Matplotlib und PIL verwendet. Die Antwort zum Öffnen von URL zusammenführen.
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()