用Python、OpenCV和Pillow(PIL)获取图像尺寸(宽和高)。

商业

在Python中,有几个处理图像的库,如OpenCV和Pillow(PIL)。本节解释了如何获得它们各自的图像尺寸(宽度和高度)。

你可以用OpenCV的shape和Pillow (PIL)的size来获得图像的大小(宽和高),作为一个元组,但要注意,每个人的顺序是不同的。

这里提供了以下信息。

  • OpenCV
    • ndarray.shape:获取图像尺寸(宽,高)。
      • 对于彩色图像
      • 对于灰度(单色)图像
  • Pillow(PIL)
    • size,width,height:获取图像尺寸(宽,高)。

请参阅以下文章,了解如何获得文件的大小(容量)而不是图像大小(尺寸)。

OpenCV: ndarray.shape: 获取图像尺寸(宽,高)。

当一个图像文件被加载到OpenCV中时,它被视为一个NumPy数组ndarray,图像的大小(宽度和高度)可以从属性shape中得到,它表示ndarray的形状。

不仅在OpenCV中,当一个图像文件在Pillow中被加载并转换为ndarray时,ndarray所代表的图像的大小也是用shape获得的。

对于彩色图像

在彩色图像的情况下,使用以下三维ndarray。

  • 行(高度)
  • 行(宽度)
  • 颜色 (3)

shape是上述元素的一个元组。

import cv2

im = cv2.imread('data/src/lena.jpg')

print(type(im))
# <class 'numpy.ndarray'>

print(im.shape)
print(type(im.shape))
# (225, 400, 3)
# <class 'tuple'>

要将每个值分配给一个变量,请按以下方式解压元组。

h, w, c = im.shape
print('width:  ', w)
print('height: ', h)
print('channel:', c)
# width:   400
# height:  225
# channel: 3

_
在解包元组时,对于此后不使用的数值,可以按照惯例将上述内容作为变量分配。例如,如果不使用颜色的数量(通道数),则使用下面的方法。

h, w, _ = im.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

它也可以按原样使用,通过索引(index)指定它,而不把它分配给一个变量。

print('width: ', im.shape[1])
print('height:', im.shape[0])
# width:  400
# height: 225

(width, height)
如果你想得到这个元组,你可以使用slice并写下:cv2.resize(),等等。如果你想通过大小来指定参数,可以使用这个。

print(im.shape[1::-1])
# (400, 225)

对于灰度(单色)图像

在灰度(单色)图像的情况下,使用以下二维ndarray。

  • 行(高度)
  • 行(宽度)

形状将是这个元组。

im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)

print(im_gray.shape)
print(type(im_gray.shape))
# (225, 400)
# <class 'tuple'>

基本上与彩色图像的情况相同。

h, w = im_gray.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

print('width: ', im_gray.shape[1])
print('height:', im_gray.shape[0])
# width:  400
# height: 225

如果你想把宽度和高度分配给变量,你可以这样做,无论图像是彩色还是灰度。

h, w = im.shape[0], im.shape[1]
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

(width, height)
如果你想得到这个元组,你可以使用切片,写法如下。无论图像是彩色的还是灰度的,都可以使用下面的书写方式。

print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)

Pillow(PIL): size, width, height: 获取图像尺寸(宽,高)。

通过用Pillow(PIL)读取图像得到的图像对象具有以下属性。

  • size
  • width
  • height

大小是以下的元组。
(width, height)

from PIL import Image

im = Image.open('data/src/lena.jpg')

print(im.size)
print(type(im.size))
# (400, 225)
# <class 'tuple'>

w, h = im.size
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

你也可以分别获得宽度和高度的属性。
width, height

print('width: ', im.width)
print('height:', im.height)
# width:  400
# height: 225

对于灰度(单色)图像也是如此。

im_gray = Image.open('data/src/lena.jpg').convert('L')

print(im.size)
print('width: ', im.width)
print('height:', im.height)
# (400, 225)
# width:  400
# height: 225