He creado una matriz así:
import numpy as np
data = np.zeros( (512,512,3), dtype=np.uint8)
data[256,256] = [255,0,0]
Lo que quiero que haga es mostrar un único punto rojo en el centro de una imagen de 512x512. (Al menos para empezar ... creo que puedo entender el resto a partir de ahí)
Respuestas:
Puede usar PIL para crear (y mostrar) una imagen:
fuente
(w,h,3)
, pero debería serlo(h,w,3)
, porque la indexación en PIL difiere de la indexación en numpy. Hay una pregunta relacionada: stackoverflow.com/questions/33725237/…(h,w,3)
. (Ahora está fijo, arriba). La longitud del primer eje se puede considerar como el número de filas en la matriz, y la longitud del segundo eje, el número de columnas. Entonces(h, w)
corresponde a una matriz de "altura"h
y "ancho"w
.Image.fromarray
convierte esta matriz en una imagen de altoh
y anchow
.img.show()
no funciona en el cuaderno de ipython.img_pil = Image.fromarray(img, 'RGB') display(img_pil.resize((256,256), PIL.Image.LANCZOS))
Lo siguiente debería funcionar:
Si está utilizando Jupyter notebook / lab, use este comando en línea antes de importar matplotlib:
fuente
plt.gray()
una vez en su código para cambiar todos los gráficos siguientes a escala de grises. No es lo que quiere el OP, pero es bueno saberlo.squeeze()
para eliminar la tercera dimensión:plt.imshow(data.squeeze())
El camino más corto es usar
scipy
, así:Esto requiere instalar PIL o Pillow también.
Un enfoque similar que también requiere PIL o Pillow pero que puede invocar a un espectador diferente es:
fuente
scipy.misc.imshow(data)
.toimage
fue desaprobado en scipy-1.0.0 y eliminado en 1.2.0, a favor de Pillow'sImage.fromarray
.Usando pygame , puedes abrir una ventana, obtener la superficie como una matriz de píxeles y manipular como quieras desde allí. Sin embargo, deberá copiar su matriz numpy en la matriz de superficie, lo que será mucho más lento que realizar operaciones gráficas reales en las superficies de pygame.
fuente
Cómo mostrar imágenes almacenadas en una matriz numpy con un ejemplo (funciona en el cuaderno Jupyter)
Sé que hay respuestas más simples, pero esta te dará una idea de cómo las imágenes se ahogan en una matriz numpy.
Ejemplo de carga
Muestra la matriz de una imagen
Cree subtramas vacías de 10 x 10 para visualizar 100 imágenes
Trazar 100 imágenes
Resultado:
¿Qué
axes.flat
hacer? Crea un enumerador numpy para que pueda iterar sobre el eje para dibujar objetos en ellos. Ejemplo:fuente
Usando la matriz de almohadas, por ejemplo:
fuente
La biblioteca de imágenes de Python puede mostrar imágenes utilizando matrices Numpy. Eche un vistazo a esta página para ver el código de muestra:
EDITAR: como dice la nota en la parte inferior de esa página, debe consultar las últimas notas de la versión que hacen que esto sea mucho más simple:
http://effbot.org/zone/pil-changes-116.htm
fuente
Suplemento para hacerlo con matplotlib. Me resultó útil hacer tareas de visión por computadora. Digamos que tienes datos con dtype = int32
fuente