Eu criei uma matriz assim:
import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]
O que eu quero que isso faça é exibir um único ponto vermelho no centro de uma imagem de 512x512. (Pelo menos para começar ... acho que consigo descobrir o resto a partir daí)
Respostas:
Você pode usar o PIL para criar (e exibir) uma imagem:
fonte
(w,h,3)
, mas deve ser(h,w,3)
, porque a indexação no PIL difere da indexação em numpy. Existe uma pergunta relacionada: stackoverflow.com/questions/33725237/…(h,w,3)
. (Agora está fixo, acima.) O comprimento do primeiro eixo pode ser pensado como o número de linhas na matriz e o comprimento do segundo eixo, o número de colunas. Então(h, w)
corresponde a uma matriz de "altura"h
e "largura"w
.Image.fromarray
converte essa matriz em uma imagem de alturah
e larguraw
.img.show()
não funciona no notebook ipython.img_pil = Image.fromarray(img, 'RGB') display(img_pil.resize((256,256), PIL.Image.LANCZOS))
O seguinte deve funcionar:
Se você estiver usando o notebook / laboratório Jupyter, use este comando embutido antes de importar o matplotlib:
fonte
plt.gray()
uma vez no código para mudar todos os gráficos a seguir para escala de cinza. Não é o que o OP quer, mas é bom saber, no entanto.squeeze()
para eliminar a terceira dimensão:plt.imshow(data.squeeze())
O caminho mais curto é usar
scipy
, assim:Isso requer a instalação de PIL ou Pillow.
Uma abordagem semelhante que também exige PIL ou Pillow, mas que pode chamar um visualizador diferente, é:
fonte
scipy.misc.imshow(data)
.toimage
foi descontinuado no scipy-1.0.0 e removido no 1.2.0, a favor do Pillow'sImage.fromarray
.Usando pygame , você pode abrir uma janela, obter a superfície como uma matriz de pixels e manipular como quiser a partir daí. Você precisará copiar sua matriz numpy para a matriz de superfície, no entanto, o que será muito mais lento do que realizar operações gráficas reais nas próprias superfícies do pygame.
fonte
Como mostrar imagens armazenadas em uma matriz numpy com exemplo (funciona no notebook Jupyter)
Eu sei que existem respostas mais simples, mas esta lhe dará uma compreensão de como as imagens são realmente afogadas de um array numpy.
Carregar exemplo
Exibir matriz de uma imagem
Crie sub-plotagens 10 x 10 vazias para visualizar 100 imagens
Plotar 100 imagens
Resultado:
O que
axes.flat
faz? Ele cria um enumerador numpy para que você possa iterar sobre o eixo, a fim de desenhar objetos neles. Exemplo:fonte
Usando o fromarray do travesseiro, por exemplo:
fonte
A Python Imaging Library pode exibir imagens usando matrizes Numpy. Dê uma olhada nesta página para obter um código de exemplo:
EDIT: Como diz a nota na parte inferior da página, você deve verificar as notas de versão mais recentes que tornam isso muito mais simples:
http://effbot.org/zone/pil-changes-116.htm
fonte
Suplemento para fazê-lo com matplotlib. Achei útil fazer tarefas de visão por computador. Digamos que você tenha dados com dtype = int32
fonte