Mostrar imagen en escala de grises
Estoy intentando mostrar una imagen en escala de grises usando matplotlib.pyplot.imshow()
. Mi problema es que la imagen en escala de grises se muestra como un mapa de colores. Necesito que sea en escala de grises porque quiero dibujar encima de la imagen con color.
Leo en la imagen y la convierto a escala de grises usando PIL.Image.open().convert("L")
image = Image.open(file).convert("L")
Luego convierto la imagen en una matriz para poder procesar fácilmente la imagen usando
matrix = scipy.misc.fromimage(image, 0)
Sin embargo, cuando lo hago
figure()
matplotlib.pyplot.imshow(matrix)
show()
muestra la imagen usando un mapa de colores (es decir, no en escala de grises).
¿Qué estoy haciendo mal aquí?
El siguiente código cargará una imagen de un archivo image.png
y la mostrará en escala de grises.
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
plt.show()
Si desea mostrar la escala de grises inversa, cambie el cmap a cmap='gray_r'
.
¿Intentas utilizar un mapa de colores en escala de grises?
Por ejemplo, algo como
imshow(..., cmap=pyplot.cm.binary)
Para obtener una lista de mapas de colores, consulte http://scipy-cookbook.readthedocs.org/items/Matplotlib_Show_colormaps.html
import matplotlib.pyplot as plt
También puedes ejecutar una vez en tu código.
plt.gray()
Esto mostrará las imágenes en escala de grises de forma predeterminada.
im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()
Yo usaría el método get_cmap. Ex.:
import matplotlib.pyplot as plt
plt.imshow(matrix, cmap=plt.get_cmap('gray'))