ipythonノートブックでPIL画像を表示する方法


109

これは私のコードです

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>

プレビュー用に画像を表示しますか、それともインライン画像を表示しますか?
Anzel、2014年

1
インライン、セルの後
WebOrCode 2014年

回答:


162

IPythonを使用しModule: displayて画像をロードできます。詳細については、ドキュメントをご覧ください。

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

5
IPython.core安定したAPIではないので、何もインポートしないでくださいIPython.display。安定したAPIはで直接公開されます。自分で投稿を編集しました。
マット

ファイルから画像を表示しています。私の例のようにPILに尋ねたpil_im
WebOrCode

@Matt、これを明確にしてくれてありがとう。私はを使用して問題にcore
遭遇した

@ WebOrCode、PILOPで要求されたとおりに使用するソリューションを提供するために私の回答を更新しました。
Anzel、2014年

1
@greatvovanそのプレビューは、ipythonノートブックを使用するすべてのユーザー(たとえば、ブラウザーなし(または新しいバージョンの場合はjupyter))が対象であり、意味がある場合、必ずしもWebブラウザーを備えている必要はありませんか?
Anzel

48

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)

3
また、画像をすばやく確認したい場合は、画像を「返す」だけでその値を確認でき、自動的に表示されます
CiprianTomoiagăAug

1
これは他の回答よりもはるかに単純です。BytesIOやnumpy配列に変換する必要はありません。
levis501

また、より高いパフォーマンスが必要です(通訳者がデータが4番目と4番目に書き起こされることを理解していない限り)
Baedsch

残念ながら、これをcolabノートブックで機能させることはできません:-/
Levon

これは最も簡単な方法です。IPythonからの表示オブジェクトとPILからの画像だけを分割していただきありがとうございます。PILを使用して奇妙なデータから画像を作成していましたが、それをノートブックに表示したいだけでした-これは美しく簡単に機能しました。
デイブキャンベル

20

これは機能していることがわかりました

# 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ことの後


2
display.displayを使用して、作成したdisplay.Imageをすぐに表示し、セルの最後にあるという依存関係を回避できます:display.display(ip_img)。これがここで使用されているのを確認できます:tensorflow.org/tutorials/mandelbrot
デビッドF

@DavidFいいえ、できません。上記のすべての順列を試します。ノートブックに画像をどのように表示しますか?
クリストファー

15

ケース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')))

画像を元のサイズで表示しています。たとえば、画像が32x32の場合、出力も非常に小さくなります。HTML関数で手動でサイズを指定する方法は?
Pramod Patil 2016年

@PramodPatil簡単SOLN:ペーストstyle=\"width:100px; height:100px;\"の間に<imgsrc
サミーBencherif

7

枕を使用してjupyterではるかに簡単です。

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

4

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)

2

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

2
pylabは非推奨です。使用しないでください。
マット

2

他の回答と私の試みに基づくと、最良の経験は、最初にインストールしてとscipyを行い、次にjupyterノートブックで次の開始コードを使用することです。

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

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

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

0

画像なしでインストールを実行することをお勧めしますimg.show()(PILインポート画像から)

$ sudo apt-get install imagemagick


0

使うだけ

from IPython.display import Image 
Image('image.png')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.