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.
- Související články:Zjištění velikosti souboru nebo adresáře (složky) v jazyce Python
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