Mostrar imagen en escala de grises

Resuelto Ryan asked hace 14 años • 9 respuestas

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í?

Ryan avatar Sep 29 '10 23:09 Ryan
Aceptado

El siguiente código cargará una imagen de un archivo image.pngy 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'.

unutbu avatar Sep 29 '2010 16:09 unutbu

¿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

janneb avatar Sep 29 '2010 16:09 janneb

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()
Eliel Van Hojman avatar Jul 22 '2012 20:07 Eliel Van Hojman

Yo usaría el método get_cmap. Ex.:

import matplotlib.pyplot as plt

plt.imshow(matrix, cmap=plt.get_cmap('gray'))
Al Conrad avatar Dec 02 '2015 16:12 Al Conrad