Получение размера изображения (ширина и высота) с помощью Python, OpenCV и Pillow(PIL)

Бизнес

В Python есть несколько библиотек для работы с изображениями, например OpenCV и Pillow (PIL). В этом разделе объясняется, как получить размер изображения (ширину и высоту) для каждой из них.

Вы можете получить размер изображения (ширину и высоту) в виде кортежа, используя shape для OpenCV и size для Pillow (PIL), но обратите внимание, что порядок каждого из них отличается.

Здесь представлена следующая информация.

  • OpenCV
    • ndarray.shape:Получение размера изображения (ширина, высота)
      • Для цветных изображений
      • Для полутоновых (монохромных) изображений
  • Pillow(PIL)
    • size,width,height:Получение размера изображения (ширина, высота)

См. следующую статью о том, как получить размер (емкость) файла вместо размера (размера) изображения.

OpenCV: ndarray.shape: Получение размера изображения (ширина, высота)

Когда файл изображения загружается в OpenCV, он рассматривается как массив NumPy ndarray, а размер изображения (ширина и высота) может быть получен из атрибута shape, который указывает на форму ndarray.

Не только в OpenCV, но и когда файл изображения загружается в Pillow и преобразуется в ndarray, размер изображения, представленного ndarray, получается с помощью shape.

Для цветных изображений

В случае цветных изображений используется следующий трехмерный ndarray.

  • Ряд (высота)
  • Ряд (ширина)
  • Цвет (3)

форма — это кортеж из вышеперечисленных элементов.

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)
Если вы хотите получить этот кортеж, вы можете использовать slices и записать его следующим образом. Следующий стиль записи можно использовать независимо от того, является ли изображение цветным или полутоновым.

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
Copied title and URL