2016-04-09 41 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,到磁盤。

相關問題