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.
- Súvisiace články:Získanie veľkosti súboru alebo adresára (priečinka) v jazyku Python
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