在 PIL 与 ndarray 中处理高宽与宽高坐标顺序

Handling Height-Width vs. Width-Height coordinate order in PIL vs. ndarray

我正在使用 Image.open() 读取图像并使用 np.asarray() 将它们转换为 ndarray。我还需要边界框;为此,我在导入图像时使用 Image.getbbox(),稍后在代码中使用 ndarray.shape

我需要协调图像通常的宽高坐标顺序和数组的高宽顺序。我应该在 np.asarray(image) 之后转置数组以保留宽高顺序,还是 asarray 负责?

不,不是。 PILnumpy 处理图像的方式不同。原因是 PIL 使用列优先方案来存储数据,另一方面 numpy 使用行优先。

因此,为了在 numpy 中创建矩阵的列主等价物,我们必须交换两个维度。

img = Image.open(r"image_path")

arr = np.asarray(img)

arr = arr.transpose((1, 0, 2))

以上代码转置颜色通道 > 1(RGB、LA、PA、RGBA 等)的图像的尺寸。如果图像只有一个通道(L、1、I 等),则使用:-

arr = arr.transpose((1, 0))

相反。