Подтвердить что ты не робот

Как показать изображение PIL в ноутбуке ipython

Это мой код

from PIL import Image
pil_im = Image.open('data/empire.jpg')

Я хотел бы сделать некоторые манипуляции с изображением на нем, а затем показать его на экране.
У меня возникла проблема с отображением изображения PIL в записной книжке python.

Я пробовал:

print pil_im

И просто

pil_im

Но оба просто дайте мне:

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=569x800 at 0x10ECA0710>
4b9b3361

Ответ 1

Вы можете использовать IPython Module: display для загрузки изображения. Вы можете прочитать больше из Док.

from IPython.display import Image 
Image(filename='data/empire.jpg')

обновленный

Поскольку OP требует использования PIL, если вы хотите показать встроенное изображение, вы можете использовать matplotlib.pyplot.imshow с numpy.asarray например так:

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

Если вам требуется только предварительный просмотр, а не встроенный, вы можете просто использовать show следующим образом:

pil_im = Image.open('data/empire.jpg', 'r')
pil_im.show()

Ответ 2

Я обнаружил, что это работает

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

После этого я могу просто сделать:

pil_im

Но это должна быть последняя строка в ячейке, без print после нее

Ответ 3

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

Ответ 4

Используйте IPython display для рендеринга изображений PIL в записной книжке.

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)

Ответ 5

Если вы используете расширение pylab, вы можете преобразовать изображение в массив numpy и использовать matplotlib imshow.

%pylab # only if not started with the --pylab option
imshow(array(pil_im))

EDIT: Как уже упоминалось в комментариях, модуль pylab устарел, поэтому вместо этого используйте матплотблику и импортируйте функцию явно:

%matplotlib
from matplotlib.pyplot import imshow 
imshow(array(pil_im))

Ответ 6

Основываясь на других ответах и ​​моих попытках, наилучшим опытом будет первая установка, подушка и scipy, а затем с помощью следующего стартового кода на вашем ноутбуке jupyter:

%matplotlib inline
from matplotlib.pyplot import imshow
from scipy.misc import imread

imshow(imread('image.jpg', 1))

Ответ 7

from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline

img = Image.open(<path_to_image>)
plt.imgshow(img)