如何获取Numpy Canvas数据数组?

时间:2016-04-09 00:08:37

标签: python-3.x numpy tkinter tkinter-canvas

我正在使用Tkinter构建一个应用程序,其中一个人可以绘制例如画布中的线条。这很好用。但是,我无法找到获取当前Canvas数据的方法。我最好从当前的Canvas数据中获取一个numpy数组,因为我的后处理步骤主要是使用numpy。

有没有办法从Canvas数据中构建numpy数组?在一些颜色格式,如RGB,优先?

我知道我可以获取信息,例如Canvas中的行(如坐标),但我不需要这些信息。我需要整个Canvas场景的光栅化图像数据。像numpy数组或(光栅化)图像(jpg,png,tiff,bitmap,...)。

1 个答案:

答案 0 :(得分:2)

就像@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文件和编写pngs的最快解决方案。

Scikit-image是作为SciPy的工具包开发的,因此它在内部使用scipy.ndimage,这正是我想要的,可以用来创建np.ndarray容易。

此外,scikit-learn是一款功能强大且速度快的图像处理软件,可以操作,读取和保存各种图像格式。

现在您有完整的选择:从Canvas数据中获取NumPy np.ndarray以进行进一步计算,使用SciPy / scikit-image处理scipy.ndimage或保存数据,例如:作为光栅化的png,到磁盘。