繁体   English   中英

如何在 ipython notebook 中显示 PIL Image

[英]How to show PIL Image in ipython notebook

这是我的代码

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

我想对其进行一些图像处理,然后将其显示在屏幕上。
我在 python notebook 中显示 PIL Image 时遇到问题。

我试过了:

print pil_im

而只是

pil_im

但两者都给我:

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

您可以使用 IPython 的Module: display加载图像。 您可以从Doc阅读更多内容。

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

更新

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

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

我发现这是有效的

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

在 jupyter 中使用枕头要简单得多。

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

您可以使用 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)

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

%matplotlib inline
from PIL import Image

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

如果您使用的是 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))

根据其他答案和我的尝试,最佳体验是首先安装、枕头和 scipy,然后在您的 jupyter 笔记本上使用以下起始代码:

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

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

使用标准 numpy、matplotlib 和 PIL 的更干净的 Python3 版本。 合并从 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()

只需使用

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

我建议通过 no image show img.show() (from PIL import Image) 安装

$ sudo apt-get install imagemagick

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM