आईपीथॉन नोटबुक में पीआईएल छवि कैसे दिखाएं


110

यह मेरा कोड है

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

मैं इस पर कुछ छवि हेरफेर करना चाहूंगा, और फिर इसे स्क्रीन पर दिखाऊंगा।
मुझे अजगर नोटबुक में पीआईएल छवि दिखाने में समस्या हो रही है।

मैंने कोशिश की है:

print pil_im

और केवल

pil_im

लेकिन दोनों सिर्फ मुझे दे:

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

क्या आप पूर्वावलोकन के लिए छवि दिखाना चाहते हैं, या आप इनलाइन छवि दिखाना चाहते हैं?
अंजेल

1
इनलाइन, सेल के बाद
WebOrCode

जवाबों:


163

आप Module: displayछवि को लोड करने के लिए IPython का उपयोग कर सकते हैं । आप डॉक से अधिक पढ़ सकते हैं ।

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

अद्यतन

ओपी की आवश्यकता उपयोग करने के लिए है के रूप में 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यह स्थिर एपीआई नहीं है, हम सीधे स्थिर एपीआई को उजागर करते हैं IPython.display। मैंने पोस्ट को खुद एडिट किया।
मैट

आप फ़ाइल से छवि प्रदर्शित कर रहे हैं। मैंने अपने उदाहरण में पीआईएल की तरह पूछाpil_im
वेबरोड

@ मैट, इसे स्पष्ट करने के लिए धन्यवाद। हालाँकि मैं कभी भी समस्या का उपयोग नहीं करता core, ख़ुशी है कि मैंने एक नई बात सीखी है :)
Anzel

@WebOrCode, मैंने PILओपी में अनुरोध के अनुसार समाधान प्रदान करने के लिए अपना जवाब अपडेट किया है।
अंजेल

1
@greatvovan पूर्वावलोकन है कि जो कोई भी उदाहरण के लिए (या नए संस्करण के लिए jupyter) ipython नोटबुक -no- ब्राउज़र का उपयोग कर रहा है, जरूरी नहीं कि वेब ब्राउज़र है, अगर यह समझ में आता है?
अंजेल

48

एक नोटबुक में पीआईएल छवियों को प्रस्तुत करने के लिए आईपीथॉन डिस्प्ले का उपयोग करें।

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
और यदि आप बस किसी छवि का शीघ्रता से निरीक्षण करना चाहते हैं, तो आप इसका मूल्य देखने के लिए इसे "वापस" कर सकते हैं, और यह स्वचालित रूप से प्रदर्शित किया जाएगा
सिप्रियन टॉमोयागै

1
यह अन्य उत्तरों की तुलना में बहुत सरल है - बाइट्सियो या संख्यात्मक सरणी में बदलने की कोई आवश्यकता नहीं है।
levis501

यह भी अधिक प्रदर्शनकारी होना चाहिए (जब तक कि दुभाषिया यह न समझ ले कि डेटा वापस और चौथे स्थान पर
भेजा

दुर्भाग्य से मैं एक कोलाब नोटबुक में काम करने के लिए नहीं मिल सकता: - /
लेवॉन

यह सबसे सरल तरीका है - IPython से केवल प्रदर्शन ऑब्जेक्ट और 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.display (ip_img)। आप इसका इस्तेमाल यहां देख सकते हैं: tanorflow.org/tutorials/mandelbrot
David F

@ दाविद नहीं, ऐसा लगता है जैसे आप नहीं कर सकते। उपरोक्त सभी क्रमपरिवर्तन की कोशिश करना। नोटबुक में कोई छवि कैसे दिखाता है?
क्रिस्टोफर

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 फ़ंक्शन में मैन्युअल रूप से आकार कैसे दें?
प्रमोद पाटिल

@PramodPatil आसान सॉल: style=\"width:100px; height:100px;\"बीच में पेस्ट <imgऔरsrc
सामी बेनचेरिफ

7

तकिया का उपयोग कर ज्यूपिटर में बहुत सरल।

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

4

आप पैकेज PIL से छवि वर्ग का उपयोग करके एक छवि खोल सकते हैं और इसे सीधे 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

यदि आप पाइलैब एक्सटेंशन का उपयोग कर रहे हैं, तो आप छवि को एक आकर्षक सरणी में बदल सकते हैं और matplotlib के imshow का उपयोग कर सकते हैं।

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

संपादित करें: जैसा कि टिप्पणियों में उल्लेख किया गया है, पाइलब मॉड्यूल को पदावनत किया जाता है, इसलिए इसके बजाय मैटप्लोटलिब जादू का उपयोग करें और फ़ंक्शन को स्पष्ट रूप से आयात करें:

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

2
pylab को पदावनत किया जाता है, उपयोग न करें।
मैट

2

अन्य उत्तरों और मेरी कोशिशों के आधार पर, सबसे अच्छा अनुभव पहले स्थापित करना, तकिया और घबराना होगा, फिर अपने ज्यूपिटर नोटबुक पर निम्नलिखित शुरुआती कोड का उपयोग करना होगा:

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

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

1

एक क्लीनर Python3 संस्करण जो मानक सुन्न, matplotlib और PIL का उपयोग करता है। 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

महज प्रयोग करें

from IPython.display import Image 
Image('image.png')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.