ipython 노트북에서 PIL 이미지를 표시하는 방법


111

이것은 내 코드입니다

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

이미지 조작을 한 다음 화면에 표시하고 싶습니다.
파이썬 노트북에서 PIL 이미지를 표시하는 데 문제가 있습니다.

나는 시도했다 :

print pil_im

그리고 그냥

pil_im

하지만 둘 다 나에게 줘 :

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

미리보기를 위해 이미지를 표시 하시겠습니까, 아니면 인라인 이미지를 표시 하시겠습니까?
Anzel 2014 년

1
인라인, 셀 후
WebOrCode

답변:


163

IPython Module: display을 사용하여 이미지를로드 할 수 있습니다 . 문서 에서 더 많은 것을 읽을 수 있습니다 .

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

5
IPython.core안정적인 API가 아니기 때문에 아무것도 가져 오지 마십시오 IPython.display. 안정적인 API를 . 내가 직접 게시물을 편집했습니다.
Matt

파일에서 이미지를 표시하고 있습니다. 나는 내 예에서와 같이 PIL에서 물었다pil_im
WebOrCode

@Matt, 이것을 명확히 해주셔서 감사합니다. 를 사용하여 문제 core가 발생한 적이 없지만 새로운 것을 배워서 기쁩니다 :)
Anzel

@WebOrCode, PILOP에서 요청한대로 솔루션을 제공하기 위해 답변을 업데이트 했습니다.
Anzel

1
@greatvovan 그 미리보기는 ipython 노트북을 사용하는 사람입니다. 예를 들어 브라우저가없는 사람 (또는 최신 버전의 경우 jupyter)이 말이된다면 반드시 웹 브라우저를 가질 필요는 없습니까?
Anzel

48

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)

3
그리고 이미지를 빠르게 검사하고 싶다면 이미지를 "반환"하여 그 값을 확인하면 자동으로 표시됩니다
Ciprian Tomoiagă

1
이것은 다른 답변보다 훨씬 간단합니다 .BytesIO 또는 numpy 배열로 변환 할 필요가 없습니다.
levis501

(인터프리터 데이터가 다시 전사와 네 번째되고 있다는 것을 이해하지 않는 한) 또한 더 확대됨에 있어야합니다
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
David F

@DavidF 아니요, 할 수없는 것 같습니다. 위의 모든 순열을 시도합니다. 노트북에 이미지를 어떻게 표시합니까?
Christopher

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

@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은 더 이상 사용되지 않으므로 사용하지 마십시오.
Matt

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

no image show img.show () (PIL import Image에서)로 다음 설치를 제안합니다.

$ sudo apt-get install imagemagick


0

그냥 사용

from IPython.display import Image 
Image('image.png')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.