我正在使用 Tkinter 构建一个应用程序,可以在其中绘制例如 Canvas 中的线条。这效果很好。但是,我无法找到获取当前 Canvas 数据的方法。最好我想从当前 Canvas 数据中获取 numpy 数组,因为我的后处理步骤主要使用 numpy。
有没有办法从 Canvas 数据构建 numpy 数组?偏好某种颜色格式,例如 RGB?
我知道我可以获得信息,例如 Canvas 外的线条(如坐标),但我不需要此信息。我需要整个 Canvas 场景的光栅化图像数据。就像 numpy 数组或(光栅化)图像(jpg、png、tiff、位图...)。
最佳答案
就像 @Bryan Oakley 所说:没有方式获得 Tkinter Canvas 绘图的光栅化版本。
但是,我想出了这个解决方法:
import skimage.io as ski_io
(...)
# draw your canvas
(...)
# save canvas to .eps (postscript) file
canvas.postscript(file="tmp_canvas.eps",
colormode="color",
width=CANVAS_WIDTH,
height=CANVAS_HEIGHT,
pagewidth=CANVAS_WIDTH-1,
pageheight=CANVAS_HEIGHT-1)
# read the postscript data
data = ski_io.imread("tmp_canvas.eps")
# write a rasterized png file
ski_io.imsave("canvas_image.png", data)
我不太喜欢变通办法,但 skimage
似乎是读取 postscript 文件和写入 png 的最快解决方案。
Scikit-image被开发为 SciPy 的工具包,因此它在内部使用 scipy.ndimage
,这正是我想要的,并且可以用来非常轻松地创建 np.ndarray
。
此外,scikit-learn本身就是一个功能强大且快速的图像处理软件,可以操作、读取和保存各种图像格式。
现在您有完整的选择:获取 NumPy np.ndarray
从 Canvas 数据中进行进一步计算,使用 SciPy/scikit-image 操作 scipy.ndimage
或保存数据,例如作为光栅化 png 保存到磁盘。
关于python-3.x - 如何获取 Canvas 数据的 Numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36511221/