Zjištění velikosti obrázku (šířka a výška) pomocí Pythonu, OpenCV a Pillow(PIL)

Podnikání

V jazyce Python existuje několik knihoven pro práci s obrázky, například OpenCV a Pillow (PIL). Tato část vysvětluje, jak pro každou z nich získat velikost obrázku (šířku a výšku).

Velikost obrázku (šířku a výšku) můžete získat jako tuple pomocí shape pro OpenCV a size pro Pillow (PIL), ale všimněte si, že pořadí každého z nich je jiné.

Zde jsou uvedeny následující informace.

  • OpenCV
    • ndarray.shape:Zjištění velikosti obrázku (šířka, výška)
      • Pro barevné snímky
      • Pro monochromatické obrázky ve stupních šedi
  • Pillow(PIL)
    • size,width,height:Zjištění velikosti obrázku (šířka, výška)

Viz následující článek o tom, jak získat velikost (kapacitu) souboru namísto velikosti (rozměru) obrázku.

OpenCV: ndarray.shape: Zjištění velikosti obrázku (šířka, výška)

Když je soubor s obrázkem načten do OpenCV, je považován za pole NumPy ndarray a velikost obrázku (šířku a výšku) lze zjistit z atributu shape, který udává tvar pole ndarray.

Nejen v OpenCV, ale také při načítání souboru s obrázkem v programu Pillow a jeho převodu na pole ndarray se velikost obrázku reprezentovaného polem ndarray zjistí pomocí tvaru.

Pro barevné snímky

V případě barevných obrázků se používá následující trojrozměrné pole ndarray.

  • Řada (výška)
  • Řádek (šířka)
  • Barva (3)

shape je tuple výše uvedených prvků.

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

Chcete-li přiřadit každou hodnotu proměnné, rozbalte tuple následujícím způsobem.

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

_
Při rozbalování tuplu lze výše uvedené konvenčně přiřadit jako proměnnou pro hodnoty, které nebudou následně použity. Například pokud se nepoužije počet barev (počet kanálů), použije se následující.

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

Lze jej také použít tak, jak je, zadáním pomocí indexu (index) bez přiřazení do proměnné.

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

(width, height)
Pokud chcete získat tento tuple, můžete použít slice a napsat následující: cv2.resize() atd. Pokud chcete zadat argument podle velikosti, použijte tento příkaz.

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

Pro monochromatické obrázky ve stupních šedi

V případě obrazů ve stupních šedi (monochromatických) se používá následující dvourozměrné pole ndarray.

  • Řada (výška)
  • Řádek (šířka)

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 podstatě stejně jako u barevných obrázků.

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

Pokud chcete přiřadit šířku a výšku proměnným, můžete tak učinit následujícím způsobem, ať už je obrázek barevný nebo ve stupních šedi.

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

(width, height)
Pokud chcete získat tento tuple, můžete použít slices a zapsat jej takto. Následující styl zápisu lze použít bez ohledu na to, zda je obrázek barevný nebo ve stupních šedi.

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

Pillow(PIL): size, width, height: Zjištění velikosti obrázku (šířka, výška)

Objekt obrazu získaný čtením obrazu pomocí funkce Pillow(PIL) má následující atributy.

  • size
  • width
  • height

Velikost je následující 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

Šířku a výšku můžete získat také jako atributy.
width, height

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

Totéž platí pro monochromatické obrázky ve stupních šedi.

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