在 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
负责?
不,不是。 PIL
和 numpy
处理图像的方式不同。原因是 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))
相反。
我正在使用 Image.open()
读取图像并使用 np.asarray()
将它们转换为 ndarray
。我还需要边界框;为此,我在导入图像时使用 Image.getbbox()
,稍后在代码中使用 ndarray.shape
。
我需要协调图像通常的宽高坐标顺序和数组的高宽顺序。我应该在 np.asarray(image)
之后转置数组以保留宽高顺序,还是 asarray
负责?
不,不是。 PIL
和 numpy
处理图像的方式不同。原因是 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))
相反。