İ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.