问题:如何在ipython笔记本中显示PIL图像
这是我的代码
from PIL import Image
pil_im = Image.open('data/empire.jpg')
我想对其进行一些图像处理,然后在屏幕上显示它。
我在python笔记本中显示PIL图像时遇到问题。
我努力了:
print pil_im
而只是
pil_im
但是两者都给我:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=569x800 at 0x10ECA0710>
This is my code
from PIL import Image
pil_im = Image.open('data/empire.jpg')
I would like to do some image manipulation on it, and then show it on screen.
I am having problem with showing PIL Image in python notebook.
I have tried:
print pil_im
And just
pil_im
But both just give me:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=569x800 at 0x10ECA0710>
回答 0
您可以使用IPython Module: display
加载图像。您可以从Doc阅读更多内容。
from IPython.display import Image
pil_img = Image(filename='data/empire.jpg')
display(pil_img)
更新
由于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()
You can use IPython’s Module: display
to load the image. You can read more from the Doc.
from IPython.display import Image
pil_img = Image(filename='data/empire.jpg')
display(pil_img)
updated
As OP’s requirement is to use PIL
, if you want to show inline image, you can use matplotlib.pyplot.imshow
with numpy.asarray
like this too:
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))
If you only require a preview rather than an inline, you may just use show
like this:
pil_im = Image.open('data/empire.jpg', 'r')
pil_im.show()
回答 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)
Use IPython display to render PIL images in a notebook.
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)
回答 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
之后没有
I found that this is working
# 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)
After this I can just do:
pil_im
But this must be last line in cell, with no print
after it
回答 3
案例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')))
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
使用枕头在jupyter中简单得多。
from PIL import Image
image0=Image.open('image.png')
image0
much simpler in jupyter using pillow.
from PIL import Image
image0=Image.open('image.png')
image0
回答 5
您可以使用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)
You can open an image using the Image class from the package PIL and display it with plt.imshow directly.
# 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)
回答 6
如果使用pylab扩展,则可以将图像转换为numpy数组,并使用matplotlib的imshow。
%pylab # only if not started with the --pylab option
imshow(array(pil_im))
编辑:如评论中所述,不推荐使用pylab模块,因此请改用matplotlib magic并显式导入函数:
%matplotlib
from matplotlib.pyplot import imshow
imshow(array(pil_im))
If you are using the pylab extension, you could convert the image to a numpy array and use matplotlib’s imshow.
%pylab # only if not started with the --pylab option
imshow(array(pil_im))
EDIT:
As mentioned in the comments, the pylab module is deprecated, so use the matplotlib magic instead and import the function explicitly:
%matplotlib
from matplotlib.pyplot import imshow
imshow(array(pil_im))
回答 7
根据其他答案和我的尝试,最好的经验是,首先安装,枕头和scipy,然后在jupyter笔记本上使用以下起始代码:
%matplotlib inline
from matplotlib.pyplot import imshow
from scipy.misc import imread
imshow(imread('image.jpg', 1))
Based on other answers and my tries, best experience would be first installing, pillow and scipy, then using the following starting code on your jupyter notebook:
%matplotlib inline
from matplotlib.pyplot import imshow
from scipy.misc import imread
imshow(imread('image.jpg', 1))
回答 8
使用标准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()
A cleaner Python3 version that use standard numpy, matplotlib and PIL. Merging the answer for opening from 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()
回答 9
我建议以下安装时不要显示任何图像show img.show()(来自PIL导入图像)
$ sudo apt-get install imagemagick
I suggest following installation by no image show img.show()
(from PIL import Image)
$ sudo apt-get install imagemagick
回答 10
只需使用
from IPython.display import Image
Image('image.png')
Just use
from IPython.display import Image
Image('image.png')