Отримання розміру зображення (ширина та висота) за допомогою Python, OpenCV та Pillow(PIL)

Бізнес

У Python є кілька бібліотек для обробки зображень, наприклад OpenCV і Pillow (PIL). У цьому розділі пояснюється, як отримати розмір зображення (ширину та висоту) для кожного з них.

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

Тут наведено наступну інформацію.

  • OpenCV
    • ndarray.shape:Отримати розмір зображення (ширина, висота)
      • Для кольорових зображень
      • Для сірих (монохромних) зображень
  • Pillow(PIL)
    • size,width,height:Отримати розмір зображення (ширина, висота)

Дивіться наступну статтю про те, як отримати розмір (ємність) файлу замість розміру (розміру) зображення.

OpenCV:ndarray.shape:Отримати розмір зображення (ширина, висота)

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

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

Для кольорових зображень

У разі кольорових зображень використовується наступний тривимірний 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

Його також можна використовувати як є, вказавши його за індексом (індексом), не призначаючи його змінній.

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