Získanie veľkosti obrázka (šírka a výška) pomocou programov Python, OpenCV a Pillow(PIL)

obchodné

V jazyku Python existuje niekoľko knižníc na spracovanie obrázkov, napríklad OpenCV a Pillow (PIL). Táto časť vysvetľuje, ako získať veľkosť obrázka (šírka a výška) pre každú z nich.

Veľkosť obrázka (šírka a výška) môžete získať ako tuple pomocou shape pre OpenCV a size pre Pillow (PIL), ale všimnite si, že ich poradie je odlišné.

Tu sú uvedené tieto informácie.

  • OpenCV
    • ndarray.shape:Získanie veľkosti obrázka (šírka, výška)
      • Pre farebné obrázky
      • Pre monochromatické obrázky v odtieňoch sivej
  • Pillow(PIL)
    • size,width,height:Získanie veľkosti obrázka (šírka, výška)

Pozrite si nasledujúci článok o tom, ako získať veľkosť (kapacitu) súboru namiesto veľkosti (veľkosti) obrázka.

OpenCV: ndarray.shape: Získanie veľkosti obrázka (šírka, výška)

Keď sa súbor s obrázkom načíta do OpenCV, považuje sa za pole NumPy ndarray a veľkosť obrázka (šírka a výška) sa dá zistiť z atribútu shape, ktorý označuje tvar ndarray.

Nielen v OpenCV, ale aj pri načítaní obrazového súboru v programe Pillow a jeho konverzii na ndarray sa veľkosť obrazu reprezentovaného ndarray získava pomocou tvaru.

Pre farebné obrázky

V prípade farebných obrázkov sa používa nasledujúci trojrozmerný ndarray.

  • Riadok (výška)
  • Riadok (šírka)
  • Farba (3)

shape je tuple vyššie uvedených prvkov.

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'>

Ak chcete priradiť každú hodnotu do premennej, rozbaľte tuple nasledovne.

h, w, c = im.shape
print('width:  ', w)
print('height: ', h)
print('channel:', c)
# width:   400
# height:  225
# channel: 3

_
Pri rozbaľovaní tuple možno vyššie uvedené konvenčne priradiť ako premennú pre hodnoty, ktoré sa potom nepoužijú. Napríklad ak sa nepoužije počet farieb (počet kanálov), použije sa nasledujúci údaj.

h, w, _ = im.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

Možno ho použiť aj tak, že ho zadáte pomocou indexu (index) bez priradenia k premennej.

print('width: ', im.shape[1])
print('height:', im.shape[0])
# width:  400
# height: 225

(width, height)
Ak chcete získať tento tuple, môžete použiť slice a napísať nasledovné: cv2.resize() atď. Ak chcete určiť argument podľa veľkosti, použite tento postup.

print(im.shape[1::-1])
# (400, 225)

Pre monochromatické obrázky v odtieňoch sivej

V prípade obrázkov v odtieňoch sivej (monochromatických) sa používa nasledujúci dvojrozmerný n-darray.

  • Riadok (výška)
  • Riadok (šírka)

Tvar bude tento tuple.

im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)

print(im_gray.shape)
print(type(im_gray.shape))
# (225, 400)
# <class 'tuple'>

V podstate to isté ako pri farebných obrázkoch.

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

Ak chcete priradiť šírku a výšku premenným, môžete to urobiť takto, bez ohľadu na to, či je obrázok farebný alebo v odtieňoch sivej.

h, w = im.shape[0], im.shape[1]
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

(width, height)
Ak chcete získať tento tuple, môžete použiť slices a zapísať ho takto. Nasledujúci štýl zápisu môžete použiť bez ohľadu na to, či je obrázok farebný alebo v odtieňoch sivej.

print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)

Pillow(PIL): size, width, height: Získanie veľkosti obrázka (šírka, výška)

Objekt obrazu získaný čítaním obrazu pomocou funkcie Pillow(PIL) má tieto atribúty.

  • size
  • width
  • height

Veľkosť je nasledujúci tuple.
(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

Šírku a výšku môžete získať aj ako atribúty.
width, height

print('width: ', im.width)
print('height:', im.height)
# width:  400
# height: 225

To isté platí aj pre monochromatické obrázky v odtieňoch sivej.

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