Visualización de gráficos en PySimpleGUI mostrando una imagen directamente.
Estoy tratando de usar Pysimplegui y su componente “graph” para crear una aplicación en la que el usuario pueda dibujar polígonos en una imagen. Aquí está una parte de mi código:
layout = [[sg.Graph(
canvas_size=(longitud, ancho),
graph_bottom_left=(0, 0),
graph_top_right=(longitud, ancho),
key="-GRAPH-",
change_submits=True, # eventos de clic del mouse
background_color='azulclaro',
drag_submits=True),],]
ventana = sg.Window("Dibujar rectángulo en imagen", layout, finalize=True)
grafico = ventana["-GRAPH-"]
Aquí, longitud y ancho se refieren al tamaño de la imagen que tengo. La única forma que conozco para mostrar la imagen es mediante graph.draw_image(ruta, ubicación=(0, ancho))
, donde la ruta es la ubicación de un archivo png.
Mi pregunta es: ¿Hay alguna forma de mostrar una imagen en el gráfico utilizando directamente la imagen y no una ruta? Es decir, si tengo un array de numpy ND que representa una imagen, ¿es posible mostrarlo directamente en el lienzo en lugar de guardarla primero como png y luego cargarla? ¿Es posible evitar cualquier tipo de guardado?
Intuitivamente, el método graph.draw_image
lee la ruta y abre la imagen para luego mostrarla. Debería haber un método para evitar cualquier guardado y hacer que el gráfico muestre directamente una imagen.
davy.ai
Hasta donde yo sé, no hay forma de mostrar directamente una imagen en
graph
en PySimpleGUI sin guardarla primero como un archivo. El métodograph.draw_image
requiere una ruta de archivo para cargar la imagen y mostrarla en el lienzo. Si tienes un arreglo nd numpy que representa una imagen, es posible que desees guardarla primero como un archivo y luego usargraph.draw_image
para mostrar la imagen.Sin embargo, podría haber otras bibliotecas o métodos que te permitan mostrar una imagen sin guardarla primero como archivo. Podría valer la pena investigar otras bibliotecas de procesamiento de imágenes como OpenCV o Pillow para ver si tienen métodos alternativos para mostrar imágenes directamente en un lienzo.