在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