如何在 ipython 笔记本中显示 PIL 图像

这是我的原则

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

我想在它上面做一些图像处理,然后在屏幕上显示它。
我有问题,显示在巨蟒笔记本 PIL 图像。

我试过了:

print pil_im

公正

pil_im

但是两者都给我:

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=569x800 at 0x10ECA0710>
268295 次浏览

更新于2021/11/17

当使用 PIL/枕头,木星笔记本现在有一个内置的 display将显示图像直接,没有额外的麻烦。

display(pil_im)

木星也将显示图像,如果它只是一个单元格中的最后一行(这已经改变,因为原来的职位)。感谢来自 @ Dean@ Prabhat的答案指出了这一点。

其他方法

从档案

您还可以使用 IPython 的 display模块来加载映像。

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

来自 PIL.Image 对象

由于 OP 的要求是使用 PIL,如果你想显示内联图像,你也可以像这样使用 matplotlib.pyplot.imshownumpy.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()

如果使用 pylab 扩展,可以将图像转换为 numpy 数组并使用 matplotlib 的 imshow。

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

编辑: 正如注释中提到的那样,pylab 模块是不推荐的,所以使用 matplotlib 魔术代替并显式地导入函数:

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

我发现这是工作

# 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

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

基于其他的答案和我的尝试,最好的经验是首先安装,枕头和 scipy,然后使用下面的启动代码在您的木星笔记本电脑:

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


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

使用 IPython 显示在笔记本中呈现 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)

您可以使用包 PIL 中的 Image 类打开一个图像,并直接使用 plt.imshow 显示它。

# First import libraries.
from PIL import Image
import matplotlib.pyplot as plt


# The folliwing line is useful in Jupyter notebook
%matplotlib inline


# Open your file image using the path
img = Image.open(<path_to_image>)


# Since plt knows how to handle instance of the Image class, just input your loaded image to imshow method
plt.imshow(img)

使用标准 numpy、 matplotlib 和 PIL 的更清晰的 Python 3版本。

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

在木星上使用枕头更简单。

from PIL import Image
image0=Image.open('image.png')
image0

我建议在安装之后不使用图像 show img.show () (来自 PIL 进口图片)

$sudo apt-get install image magick

用就是了

from IPython.display import Image
Image('image.png')

为了简单地在笔记本中可视化图像,您可以使用 display ()

%matplotlib inline
from PIL import Image


im = Image.open(im_path)
display(im)