İpython not defterinde PIL Görüntüsü nasıl gösterilir


112

Bu benim kodum

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

Üzerinde biraz görüntü işleme yapmak ve ardından ekranda göstermek istiyorum.
Python not defterinde PIL Görüntüsünü göstermekte sorun yaşıyorum.

Denedim:

print pil_im

Ve sadece

pil_im

Ama ikisi de bana şunu veriyor:

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

Önizleme için resmi mi yoksa satır içi resmi mi göstermek istersiniz?
Anzel

1
satır içi, hücreden sonra
WebOrCode

Yanıtlar:


164

Module: displayGörüntüyü yüklemek için IPython'u kullanabilirsiniz . Sen daha okuyabilir Doc .

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

güncellenmiş

OP'nin gereksinimi kullanmak olduğu için PIL, satır içi resmi göstermek istiyorsanız, matplotlib.pyplot.imshowbununla da kullanabilirsiniz 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))

Satır içi yerine yalnızca önizlemeye ihtiyacınız varsa, şu şekilde kullanabilirsiniz show:

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

5
Ondan hiçbir şey içe IPython.coreaktarmayın kararlı api değil, kararlı api'yi doğrudan IPython.display. Gönderiyi kendim düzenledim.
Matt

dosyadaki resmi görüntülüyorsunuz. pil_im
PIL'den örneğimdeki

@Matt, bunu açıkladığınız için teşekkürler. Kullanırken hiçbir zaman sorunla karşılaşmamış coreolsam da, yeni bir şey öğrendiğime sevindim :)
Anzel

@WebOrCode, kullanarak çözümler sağlamak için cevabımı güncelledim PIL OP'de istendiği gibi .
Anzel

1
@greatvovan, ipython notebook'u kullananlar için bu önizlemedir —örneğin tarayıcı yok (veya daha yeni sürüm için jupyter), mantıklıysa, web tarayıcısı olması gerekmez mi?
Anzel

48

Bir not defterinde PIL görüntülerini işlemek için IPython ekranını kullanın.

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
ve bir resmi hızlı bir şekilde incelemek istiyorsanız, değerini görmek için onu "iade edebilirsiniz" ve otomatik olarak görüntülenecektir
Ciprian Tomoiagă

1
Bu diğer cevaplardan çok daha basit - BytesIO ya da numpy dizisine dönüştürmeye gerek yok.
levis501

ayrıca daha performanslı olmalıdır (tercüman verilerin geriye ve dördüncü olarak kaydedildiğini
anlamadıkça

Maalesef bunu bir colab not defterinde çalıştıramıyorum: - /
Levon

bu en basit yaklaşımdır - yalnızca görüntüleme nesnesini IPython'dan ve Görüntüyü PIL'den ayırdığınız için teşekkür ederiz. tuhaf verilerden bir görüntü oluşturmak için PIL kullanıyordum ve bunu sadece defterimde görüntülemek istedim - bu güzel ve basit bir şekilde çalıştı.
dave campbell

20

Bunun işe yaradığını buldum

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

Bundan sonra sadece şunları yapabilirim:

pil_im

Ama bu hiçbir hücreye son satır olmalıdır printondan sonra


2
Ekranı görüntülemek için display.display'i kullanabilirsiniz. Hücrede son olma bağımlılığını ortadan kaldırarak, hemen oluşturduğunuz görüntü: display.display (ip_img). Bunun burada kullanıldığını görebilirsiniz: tensorflow.org/tutorials/mandelbrot
David F

@DavidF hayır, yapamayacaksın gibi görünüyor. Yukarıdakilerin tüm permütasyonları deneniyor. Defterde bir resim nasıl gösterilir?
Christopher

15

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

Görüntüyü orijinal boyutunda gösteriyor. Örneğin, görüntü 32x32 ise, çıktı da çok küçük olacaktır. HTML fonksiyonunda boyut manuel olarak nasıl verilir?
Pramod Patil

@PramodPatil Kolay çöz: yapıştırmak style=\"width:100px; height:100px;\"arasında <imgvesrc
Samy Bencherif

7

yastık kullanarak jupyterde çok daha basit.

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

4

PIL paketindeki Image sınıfını kullanarak bir görüntüyü açabilir ve doğrudan plt.imshow ile görüntüleyebilirsiniz.

# 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 uzantısını kullanıyorsanız, görüntüyü bir numpy dizisine dönüştürebilir ve matplotlib'in imshow'unu kullanabilirsiniz.

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

DÜZENLEME: Yorumlarda belirtildiği gibi, pylab modülü kullanımdan kaldırılmıştır, bu nedenle bunun yerine matplotlib sihrini kullanın ve işlevi açıkça içe aktarın:

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

2
pylab kullanımdan kaldırıldı, kullanmayın.
Matt

2

Diğer yanıtlara ve denemelerime göre, en iyi deneyim ilk önce yükleme, yastıklama ve scipy, ardından jupyter defterinize aşağıdaki başlangıç ​​kodunu kullanma olacaktır:

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

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

1

Standart numpy, matplotlib ve PIL kullanan daha temiz bir Python3 sürümü. URL'den açmanın cevabı birleştiriliyor.

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

Kurulumun img.show () gösterilmeden yapılmasını öneririm (PIL içe aktarma görüntüsünden)

$ sudo apt-get install imagemagick


0

Sadece kullan

from IPython.display import Image 
Image('image.png')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.