Wyświetl obraz za pomocą Pythona

107

Próbowałem użyć IPython.display z następującym kodem:

from IPython.display import display, Image
display(Image(filename='MyImage.png'))

Próbowałem też użyć matplotlib z następującym kodem:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
plt.imshow(mpimg.imread('MyImage.png'))

W obu przypadkach nic nie jest wyświetlane, nawet komunikat o błędzie.

FiReTiTi
źródło

Odpowiedzi:

211

Jeśli używasz matplotlib i chcesz wyświetlić obraz w swoim interaktywnym notatniku, wypróbuj następujące rozwiązania:

%pylab inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('your_image.png')
imgplot = plt.imshow(img)
plt.show()
Joe Bathelt
źródło
Dziękuję za odpowiedź, prawie działa :-) Obraz jest wyświetlany, ale poziomy szarości są zastępowane za pomocą lutni ogniowej. Dowolny pomysł?
FiReTiTi
3
Spróbuj wyraźnie zdefiniować mapę kolorów: plt.imshow (lum_img, cmap = "gray")
Joe Bathelt,
3
W moim rozumieniu ostatnie polecenie plt.show () powoduje wyświetlenie. Wcześniej można było coś dodać do wykresu, np. Dodając warstwy do obrazu. Polecam samouczek dotyczący obrazu matplotlib jako odniesienie: matplotlib.org/users/image_tutorial.html
Joe Bathelt
5
Dzięki za odpowiedzi, teraz działa idealnie! Tylko drobne szczegóły dla potencjalnych czytelników, jest „szara” zamiast „szara”.
FiReTiTi
Nie, Grey to poprawna i oryginalna pisownia. Szary został przyjęty z pewnymi odchyleniami od angielskiego, więc jest bardziej powszechny w krajach takich jak USA.
perfo
39

Jeśli używasz matplotlib, musisz pokazać obraz używając, plt.show()chyba że nie jesteś w trybie interaktywnym. Na przykład:

plt.figure()
plt.imshow(sample_image) 
plt.show()  # display it
MaxPowers
źródło
Czytając inną odpowiedź, właśnie dostałem, że muszę dodać plt.show () po kodzie, który już mam, zamiast podmieniać imshow. Dzięki za pomoc.
FiReTiTi
Myślę, że to odpowiada na pytanie dokładnie w porównaniu z przyjętą odpowiedzią.
Prasad Raghavendra
23

W znacznie prostszy sposób możesz zrobić to samo za pomocą

from PIL import Image

image = Image.open('image.jpg')
image.show()
the_unknown_spirit
źródło
1
Dziękuję za pomoc. Zainstalowałem PIL i teraz działa. Masz jakiś pomysł, dlaczego dwie metody, które wypróbowałem, nie działają?
FiReTiTi
Jeśli nie udało mi się zainstalować PIL (tak jak w przypadku mnie), wypróbuj Pillow, działał jak urok.
mrk
1
Zastanawiam się, jak import Imagedziała to stwierdzenie; nie powinno być from PIL import Image?
Laszlo Treszkai
To rozwiązanie niekoniecznie zamyka deskryptor pliku. Zamiast tego użyj go z menedżerem kontekstu:with Image.open('image.jpg') as im: im.show()
Laszlo Treszkai
Co to za Imagepakiet?
Louis Yang,
7

Korzystanie z opencv-python jest szybsze dla większej liczby operacji na obrazie:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpg')
im_resized = cv2.resize(im, (224, 224), interpolation=cv2.INTER_LINEAR)

plt.imshow(cv2.cvtColor(im_resized, cv2.COLOR_BGR2RGB))
plt.show()
Qhan
źródło
4

To proste Użyj następującego pseudokodu

from pylab import imread,subplot,imshow,show

import matplotlib.pyplot as plt

image = imread('...')  // choose image location

plt.imshow(image)

plt.show() // to pokaże ci obraz na konsoli.

Ayush Srivastava
źródło
4

Twoja pierwsza sugestia działa dla mnie

from IPython.display import display, Image
display(Image(filename='path/to/image.jpg'))
Harry Moreno
źródło
To zawsze będzie wyświetlane jako pierwsze, jeśli istnieją również inne wykresy, dlaczego tak jest?
Christos Karapapas
1
niepewny. Nie jestem ekspertem ipython. Obraz można wyświetlić na kilka sposobów, jak widać z odpowiedzi tutaj.
Harry Moreno
3

Korzystając z Jupyter Notebook, kod może być tak prosty, jak poniżej.

%matplotlib inline
from IPython.display import Image
Image('your_image.png')

Czasami możesz chcieć wyświetlić serię obrazów w pętli for, w takim przypadku możesz chcieć połączyć je displayi Imagesprawić, by działało.

%matplotlib inline
from IPython.display import display, Image
for your_image in your_images:
    display(Image('your_image'))
Fei Yao
źródło
2

Twój kod:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

Co to powinno być:

plt.imshow(mpimg.imread('MyImage.png'))
File_name = mpimg.imread('FilePath')
plt.imshow(FileName)
plt.show()

brakuje plt.show()ci, chyba że jesteś w notatniku Jupyter, inne IDE nie wyświetlają automatycznie wykresów, więc musisz używać za plt.show()każdym razem, gdy chcesz wyświetlić działkę lub zmienić istniejącą działkę w kodzie uzupełniającym.

Rohit Madan
źródło
1
import IPython.display as display
from PIL import Image
image_path = 'my_image.jpg'
display.display(Image.open(image_path))
Rajan saha Raju
źródło
1

Rozwiązanie do wizualizacji obrazu PIL notebooka Jupyter z dowolną liczbą obrazów:

def show(*imgs, **kwargs):
    '''Show in Jupyter notebook one or sequence of PIL images in a row. figsize - optional parameter, controlling size of the image.
    Examples:
    show(img)
    show(img1,img2,img3)
    show(img1,img2,figsize=[8,8])
    '''
    
    if 'figsize' not in kwargs:
        figsize = [9,9]
    else:
        figsize = kwargs['figsize']
    
    fig, ax = plt.subplots(1,len(imgs),figsize=figsize)
    if len(imgs)==1:
        ax=[ax]
    
    for num,img in enumerate(imgs):
        ax[num].imshow(img)
        ax[num].axis('off')
        
    tight_layout()
Apogentus
źródło