[英]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數組
可能應該用matplotlib
的imshow
檢查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.