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í?
¿Intenta usar un mapa de colores en escala de grises?
Por ejemplo, algo así 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
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()