2016-04-09 42 views
1

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

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


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

+0

我从来没有使用过numpy,但是从canvas项目获取坐标的方法已有详细记录。 –

+0

是的,但我需要图像数据,如数据数组或像Canvas中的某些图像文件(如jpg,png,tiff,位图等)。对象的坐标本身与我无关,因为只有坐标,我将不得不重新绘制景物,例如用PIL。我需要光栅化图像数据。 – daniel451

+0

没有办法从画布上获取栅格化图像数据 –

回答

1

赞@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是一个功能强大且快速的图像处理软件,可以操作,读取和保存各种图像格式。

现在你有充分的选择:得到NumPynp.ndarray就进一步计算帆布数据,操纵scipy.ndimage与SciPy的/ scikit图像或保存数据,例如作为一个光栅化的PNG,到磁盘。

相关问题