python-3.x - 如何获取 Canvas 数据的 Numpy 数组?

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

我正在使用 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/

相关文章:

python - Tkinter Canvas 文本添加边框(轮廓)

python - Pandas : Map the list value in a column to dictionary based on group

python - 如何从 pandas 的数据框中选择某些行

python - 按住按钮和窗口更新问题

python - 将 sqlite3 与 Tkinter 链接

向量化双求和的 Pythonic 方法

python-3.x - 在 Keras (Python) 中使用神经网络进行样本外预测

python - 当我通过类名访问类的属性时,Python 调用了什么方法?

python - 无法在用户手动设置的 python 中打印环境变量,以便在代码的后面部分使用该变量

numpy - 为什么 np.einsum 中的优化参数默认为 False?