Получаване на размера на изображението (ширина и височина) с 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)

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)
Ако искате да получите този кортеж, можете да използвате 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