Exibir uma imagem com Python


107

Tentei usar IPython.display com o seguinte código:

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

Também tentei usar matplotlib com o seguinte código:

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

Em ambos os casos, nada é exibido, nem mesmo uma mensagem de erro.

Respostas:


210

Se você estiver usando matplotlib e quiser mostrar a imagem em seu notebook interativo, tente o seguinte:

%pylab inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('your_image.png')
imgplot = plt.imshow(img)
plt.show()

Obrigado pela sua resposta, quase funciona :-) A imagem é exibida, mas os níveis de cinza são substituídos usando uma lareira. Qualquer ideia?
FiReTiTi de

3
Tente definir o mapa de cores explicitamente: plt.imshow (lum_img, cmap = "grey")
Joe Bathelt

3
No meu entendimento, o último comando plt.show () produz a exibição. Antes disso, você pode adicionar ao gráfico, por exemplo, adicionando camadas à imagem. Eu recomendo o tutorial de imagem matplotlib como referência: matplotlib.org/users/image_tutorial.html
Joe Bathelt

5
Obrigado por suas respostas, agora funciona perfeitamente! Apenas alguns pequenos detalhes para os leitores em potencial, é "cinza" em vez de "cinza".
FiReTiTi de

Não, Gray é a grafia correta e original. O cinza foi adotado em alguns desvios do inglês, por isso é mais comum em países como os EUA.
perfo

39

Se você usar matplotlib, será necessário mostrar a imagem usando, a plt.show()menos que não esteja no modo interativo. Por exemplo:

plt.figure()
plt.imshow(sample_image) 
plt.show()  # display it

Lendo outra resposta, acabei de descobrir que preciso adicionar plt.show () após o código que já possuo, em vez de substituir o imshow. Obrigado pela ajuda.
FiReTiTi de

Acho que isso responde à pergunta precisamente em comparação com a resposta aceita.
Prasad Raghavendra

23

De uma maneira muito mais simples, você pode fazer o mesmo usando

from PIL import Image

image = Image.open('image.jpg')
image.show()

1
Obrigado pela ajuda. Instalei o PIL e agora funciona. Alguma ideia de por que os dois métodos que tentei não funcionaram?
FiReTiTi

Se não conseguir instalar o PIL (como foi o meu caso), experimente Pillow, funcionou perfeitamente para mim.
mrk

1
Eu me pergunto como a import Imagedeclaração funciona; não deveria ser from PIL import Image?
Laszlo Treszkai

Esta solução não fecha necessariamente o descritor de arquivo. Em vez disso, use-o com um gerenciador de contexto:with Image.open('image.jpg') as im: im.show()
Laszlo Treszkai

Que Imagepacote é esse ?
Louis Yang

7

Usar opencv-python é mais rápido para mais operação na imagem:

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

4

É simples Use o seguinte pseudo código

from pylab import imread,subplot,imshow,show

import matplotlib.pyplot as plt

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

plt.imshow(image)

plt.show() // isso mostrará a imagem no console.


4

Sua primeira sugestão funciona para mim

from IPython.display import display, Image
display(Image(filename='path/to/image.jpg'))

Isso sempre será exibido primeiro se houver também outros gráficos, por que isso?
Christos Karapapas,

1
não tenho certeza. Não sou um especialista em ipython. Existem várias maneiras de mostrar uma imagem, como você pode ver nas respostas aqui.
Harry Moreno

3

Usando o Jupyter Notebook, o código pode ser tão simples quanto o seguinte.

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

Às vezes, você pode querer exibir uma série de imagens em um loop for; nesse caso, você pode querer combiná -las displaye Imagefazê-las funcionar.

%matplotlib inline
from IPython.display import display, Image
for your_image in your_images:
    display(Image('your_image'))

2

Seu código:

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

O que deveria ser:

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

você está perdendo um a plt.show()menos que esteja no bloco de notas Jupyter, outros IDE não exibem gráficos automaticamente, então você deve usar plt.show()cada vez que quiser exibir um gráfico ou fizer uma alteração em um gráfico existente no código de acompanhamento.


1
import IPython.display as display
from PIL import Image
image_path = 'my_image.jpg'
display.display(Image.open(image_path))

1

Solução para visualização de imagem PIL do notebook Jupyter com número arbitrário de imagens:

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()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.