cv2图像大小转置自PIL Image

cv2 image size is transposed from PIL Image

我有一张尺寸为 72x96 的图片。 Windows 表示它的大小是 72x96。 PIL Image 也说是 72x96:

from PIL import Image, ImageOps

with Image.open(<path>) as img:
    print(img.size) # (72, 96)
    print(ImageOps.exif_transpose(img).size) # (72, 96)

但是当我用 cv2.imreadskimage.io.imread 读取图像时,它说图像的形状是 (96, 72, 3):

from skimage.io import imread
im0 = imread(<path>)
print(im0.shape) # (96, 72, 3)

这里有什么问题?即使我做了那样的事情:

import matplotlib.pyplot as plt
plt.imshow(im0)

显示的图片尺寸正确,但书写的尺寸看起来被调换了。

这是预期的行为。

PIL returns 图像的大小为(宽度,高度)(PIL documentation), whereas numpy returns the shape of an array as the lengths of the first and then second dimension (in the case of a 2d array), so (height, width) (Numpy documentation)。