繁体   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