我正在使用Tkinter构建一个应用程序,其中一个人可以绘制例如画布中的线条。这很好用。但是,我无法找到获取当前Canvas数据的方法。我最好从当前的Canvas数据中获取一个numpy数组,因为我的后处理步骤主要是使用numpy。
有没有办法从Canvas数据中构建numpy数组?在一些颜色格式,如RGB,优先?
我知道我可以获取信息,例如Canvas中的行(如坐标),但我不需要这些信息。我需要整个Canvas场景的光栅化图像数据。像numpy数组或(光栅化)图像(jpg,png,tiff,bitmap,...)。
答案 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,到磁盘。