Tengo algunas representaciones de color que necesito guardar en escala de grises. ¿Hay una forma fácil de hacerlo sin cambiar los formatos de trazado?Guardar diagrama de matplotlib en escala de grises
Respuesta
En realidad, esto se preguntó antes. Aquí es una respuesta bastante buena, que viene segundo en Google (a partir de hoy):
Display image as grayscale using matplotlib
Y la solución es muy similar al de Suki ...
Oh, bueno, estoy aburrido, así que publicar aquí también un código completo soplado:
import numpy as np
import pylab as p
xv=np.ones(4)*.5
yv=np.arange(0,4,1)
xv1=np.ones(4)*-.5
yv1=np.arange(0,4,1)
#red vertical line on the right
yv2=np.arange(0,1.5,0.1)
xv2=np.ones_like(yv2)*.7
#red vertical line on the left
yv3=np.arange(0,2,0.01)
xv3=np.ones_like(yv3)*-0.7
###
xc=np.arange(-1.4,2,0.05)
yc=np.ones_like(xc)*1
fig = p.figure()
ax1 = fig.add_subplot(111)
#adjustprops = dict(left=0.12, bottom=0.2, right=0.965, top=0.96, wspace=0.13, hspace=0.37)
#fig.subplots_adjust(**adjustprops)
ax1.plot(xv,yv, color='blue', lw=1, linestyle='dashed')
ax1.plot(xv1,yv1, 'green', linestyle='dashed')
ax1.plot(np.r_[-1:1:0.2],np.r_[-1:1:0.2],'red')
ax1.plot(xc,yc, 'k.', markersize=3)
p.savefig('colored_image.png')
import matplotlib.image as mpimg
import matplotlib.cm as cm
import Image
figprops = dict(figsize=(10,10), dpi=100)
fig1 = p.figure(**figprops)
#fig1 = p.figure()
#ax1 = fig.add_subplot(111)
adjustprops = dict()
image=Image.open('colored_image.png').convert("L")
arr=np.asarray(image)
p.figimage(arr,cmap=cm.Greys_r)
p.savefig('grayed.png')
p.savefig('grayed.pdf',papertype='a4',orientation='portrait')
Esto producirá un gráfico en color, de leerlo, convertir a escala de grises, y se ahorrará un png y pdf.
Esta respuesta no es muy buena porque requiere rasterizar la trama y las fuentes que contiene. La rasterización ocurre cuando se convierte a .png. Sería mejor escribir un pdf en el sistema de archivos y luego convertirlo a escala de grises, tal vez usando ghostscript. –
"importar imagen" ya no funciona. En su lugar, use "de PIL import Image" – warunapww
Actualmente es incómodo hacerlo directamente desde matplotlib, pero en "el futuro" planean admitir una llamada a set_gray(True)
en la figura (consulte el hilo de la lista de correo here).
Sus mejores opciones serán para guardarlo en color y convertirlo, ya sea en pitón con PIL:
import Image
Image.open('color.png').convert('L').save('bw.png')
o desde la línea de comandos con ImageMagick:
convert -type Grayscale color.png bw.png
Al igual que las otras respuestas, esta respuesta no es muy satisfactoria porque rasteriza la trama. –
Y para añadir Solución de Mu Mind
Si por alguna razón desea evitar escribirlo en un archivo, puede usar StringIO como un archivo:
import Image
import pylab
from StringIO import StringIO
pylab.plot(range(10),[x**2 for x in range(10)])
IO = StringIO()
pylab.savefig(IO,format='png')
IO.seek(0)
#this, I stole from Mu Mind solution
Image.open(IO).convert('L').show()
Al igual que las otras respuestas, esta respuesta no es muy satisfactoria porque rasteriza la trama. –
Estoy luchando con este problema también. Por lo que puedo decir, matplotlib no admite la conversión directa a escala de grises, pero puede guardar un pdf en color y luego convertirlo a escala de grises con ghostscript:
gs -sOutputFile = gray.pdf -sDEVICE = pdfwrite -sColorConversionStrategy = Gray -dProcessColorModel =/DeviceGray -dNOPAUSE -dBATCH -dAutoRotatePages =/None color.pdf
¿por qué no solo utiliza la hoja de estilos de escala de grises? http://matplotlib.org/examples/style_sheets/plot_grayscale.html –
Eso en realidad no convierte un gráfico de color a escala de grises. Simplemente hace que algunos elementos sean grises por defecto. Tengo trazados que quiero exportar como color para una página web y convertir a gris para imprimir. –
Puede usar las hojas de estilo dentro de un administrador de contexto. Envuelva sus llamadas a una función de trazado que no sea de procesamiento de datos con esas. –
- 1. Mostrar imagen como escala de grises usando matplotlib
- 2. crear una imagen en escala de grises
- 3. Drawable => escala de grises
- 4. opencv VideoCapture.set escala de grises?
- 5. Google Maps en escala de grises
- 6. Escala de aljaba Matplotlib
- 7. escala de grises de 16 bits png
- 8. diagrama de dispersión en matplotlib
- 9. Convierta una imagen a escala de grises
- 10. escala de grises con la animación CSS
- 11. Convertir corto [] en una imagen en escala de grises
- 12. diagrama de matplotlib e imshow
- 13. Tinte de un NSImage (o CIImage) en escala de grises
- 14. ¿Cómo hacer enrejado xyplot() en escala de grises en R?
- 15. cómo implementar la representación en escala de grises en OpenGL?
- 16. Crear un PNG verdadero en escala de grises en PHP
- 17. Anotar diagrama de series temporales en Matplotlib
- 18. No hay ventana de diagrama en matplotlib
- 19. Diagrama de dispersión de Matplotlib; color en función de una tercera variable
- 20. Convertir binario en escala de grises sin formato a JPEG
- 21. Conversión a escala de grises usando emguCV en C#
- 22. Detectando imágenes en escala de grises con .Net
- 23. Android: Convertir imágenes en color a escala de grises
- 24. UIView en escala de grises. Ver no ser redibujado
- 25. Matplotlib: guardar el gráfico en numpy array
- 26. matplotlib: diagrama de generación de vectores
- 27. Cómo extraer datos del diagrama de matplotlib
- 28. jQuery convertir la imagen a escala de grises?
- 29. Cambio x nueva escala en matplotlib
- 30. Guardar una subtrama en matplotlib
Hubo algunas discusiones al respecto, vea [convertir la cifra de color a BW/escala de grises] (http://old.nabble.com /convert-figure-from-color-to-BW-grayscale-td29756144.html). No sé si el atributo 'set_gray' está disponible o no en la última versión de matplotlib. – chl
Podría usar imagemagick después: 'convert -type Grayscale old.png new.png' Creo que ya hay algo en SO cf [link] (http://stackoverflow.com/questions/3823752/display-image-as- escala de grises-usando-matplotlib) –