簡體   English   中英

Pillow Image對象和numpy數組之間的轉換會更改維度

[英]Conversion between Pillow Image object and numpy array changes dimension

我正在使用Pillow和numpy,但在Pillow Image對象和numpy數組之間進行轉換時遇到問題。

當我執行以下代碼時,結果很奇怪。

im = Image.open(os.path.join(self.img_path, ifname))
print im.size
in_data = np.asarray(im, dtype=np.uint8)
print in_data.shape

結果是

(1024, 768)
(768, 1024)

尺寸為何改變?

我可能是列專業,而numpy中的數組是行主要的

執行in_data = in_data.T來轉置python數組

可能應該用matplotlibimshow檢查in_data,以確保圖片看起來正確。

但是你知道matplotlib有自己的加載函數,可以直接為你提供numpy數組嗎? 請參閱: http//matplotlib.org/users/image_tutorial.html

如果您的圖像是灰度,請執行以下操作:

in_data = in_data.T

但是如果您正在使用rbg圖像,則需要確保轉置操作僅沿兩個軸:

in_data = np.transpose(in_data, (1,0,2))

實際上這是因為大多數圖像庫都提供了與numpy數組相比轉換的圖像。 這是(我認為),因為你逐行寫圖像文件,所以第一個索引(比如x )指的是行號(所以x是垂直軸),第二個索引( y )指的是后續像素線(因此y是水平軸),這與我們的日常坐標感相反。

如果你想正確處理它,你需要記住寫:

image = library.LoadImage(path)
array = (library.FromImageToNumpyArray(image)).T

因此:

image = library.FromNumpyArrayToImage(array.T)
library.WriteImage(image, path)

這也適用於3D圖像。 但我不承諾這是所有圖像庫的情況 - 只是我使用過的這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM