una recorrer por matriz imagen grises escala convertir como cargar python matplotlib grayscale

recorrer - escala de grises opencv python



Mostrar la imagen en escala de grises con matplotlib (6)

Estoy tratando de 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 la escala de grises porque quiero dibujar sobre la imagen con color.

Leí en la imagen y la convertí en escala de grises usando Image.open (). Convert ("L") de PIL

image = Image.open(file).convert("L")

Luego convierto la imagen en una matriz para que pueda hacer un procesamiento de imagen con facilidad

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 es escala de grises).

¿Qué estoy haciendo mal aquí?



El siguiente código cargará una imagen de un archivo image.png y lo 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'') plt.show()

Si desea visualizar la escala de grises inversa, cambie el cmap a cmap=''gray_r'' .


La respuesta de @ unutbu es bastante cercana a la respuesta correcta.

De forma predeterminada, plt.imshow () intentará escalar los datos de su matriz (MxN) a 0.0 ~ 1.0. Y luego mapear a 0 ~ 255. Para la mayoría de las imágenes tomadas naturales, está bien, no verá una diferente. Pero si tiene un rango estrecho de la imagen de valor de píxel, digamos que el píxel mínimo es 156 y el píxel máximo es 234. La imagen gris se verá totalmente mal. La forma correcta de mostrar una imagen en gris es

from matplotlib.colors import NoNorm ... plt.imshow(img,cmap=''gray'',norm=NoNorm()) ...

Veamos un ejemplo:

esta es la imagen original : original

esto es usar la configuración de norma predeterminada, que es Ninguna: foto incorrecta

esto está usando la configuración NoNorm, que es NoNorm (): foto derecha


Usaría el método get_cmap. Ex.:

import matplotlib.pyplot as plt plt.imshow(matrix, cmap=plt.get_cmap(''gray''))


prueba esto:

import pylab from scipy import misc pylab.imshow(misc.lena(),cmap=pylab.gray()) pylab.show()


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 por defecto

im = array(Image.open(''I_am_batman.jpg'').convert(''L'')) plt.imshow(im) plt.show()