Атрыманне памеру выявы (шырыні і вышыні) з дапамогай 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
Copied title and URL