it-swarm.com.de

So zeigen Sie das PIL-Bild in einem ipython-Notebook an

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>
55
WebOrCode

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')

aktualisierte

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()
93
Anzel

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

13
WebOrCode

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')))
11
gaziya

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)
11
sathyz

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))
1
Rob

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)
1
M . Franklin

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))
1
Ebrahim Byagowi

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()
0
Punnerud