V Pythonu je na voljo več knjižnic za obdelavo slik, kot sta OpenCV in Pillow (PIL). V tem razdelku je razloženo, kako za vsako od njih pridobiti velikost slike (širina in višina).
Velikost slike (širina in višina) lahko dobite kot tuple z uporabo shape za OpenCV in size za Pillow (PIL), vendar upoštevajte, da je vrstni red vsakega od njiju drugačen.
Tu so na voljo naslednje informacije.
- OpenCV
ndarray.shape
:Pridobi velikost slike (širina, višina)- Za barvne slike
- Za sivinske (enobarvne) slike
- Pillow(PIL)
size
,width
,height
:Pridobi velikost slike (širina, višina)
Oglejte si naslednji članek o tem, kako pridobiti velikost (zmogljivost) datoteke namesto velikosti (velikosti) slike.
OpenCV: ndarray.shape: Pridobi velikost slike (širina, višina)
Ko se slikovna datoteka naloži v OpenCV, se obravnava kot polje NumPy ndarray, velikost slike (širina in višina) pa lahko dobite iz atributa shape, ki označuje obliko ndarraya.
Ne le v OpenCV, tudi pri nalaganju slikovne datoteke v program Pillow in pretvorbi v ndarray se velikost slike, ki jo predstavlja ndarray, pridobi s pomočjo shape.
Za barvne slike
Pri barvnih slikah se uporablja naslednji tridimenzionalni ndarray.
- Vrstica (višina)
- Vrstica (širina)
- Barva (3)
shape je tuple zgornjih elementov.
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'>
Če želite vsako vrednost pripisati spremenljivki, razpakirajte tuple na naslednji način.
h, w, c = im.shape print('width: ', w) print('height: ', h) print('channel:', c) # width: 400 # height: 225 # channel: 3
_
Ko razpakirate tuple, lahko zgoraj navedeno konvencionalno dodelite kot spremenljivko za vrednosti, ki se pozneje ne bodo uporabljale. Na primer, če se število barv (število kanalov) ne uporablja, se uporabi naslednje.
h, w, _ = im.shape print('width: ', w) print('height:', h) # width: 400 # height: 225
Uporabite ga lahko tudi tako, da ga določite z indeksom (index), ne da bi ga pripisali spremenljivki.
print('width: ', im.shape[1]) print('height:', im.shape[0]) # width: 400 # height: 225
(width, height)
Če želite dobiti ta tuple, lahko uporabite slice in napišete naslednje: cv2.resize() itd. Če želite določiti argument z velikostjo, uporabite to.
print(im.shape[1::-1]) # (400, 225)
Za sivinske (enobarvne) slike
V primeru sivinskih (enobarvnih) slik se uporablja naslednji dvodimenzionalni ndarray.
- Vrstica (višina)
- Vrstica (širina)
Oblika bo ta 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'>
Načeloma enako kot pri barvnih slikah.
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
Če želite širino in višino dodeliti spremenljivkam, lahko to storite na naslednji način, ne glede na to, ali je slika barvna ali v sivih odtenkih.
h, w = im.shape[0], im.shape[1] print('width: ', w) print('height:', h) # width: 400 # height: 225
(width, height)
Če želite dobiti ta tuple, lahko uporabite rezine in jih zapišete na naslednji način. Naslednji način zapisa lahko uporabite ne glede na to, ali je slika barvna ali v sivih lestvicah.
print(im_gray.shape[::-1]) print(im_gray.shape[1::-1]) # (400, 225) # (400, 225)
Pillow(PIL): size, width, height: Pridobi velikost slike (širina, višina)
Slikovni predmet, pridobljen z branjem slike s funkcijo Pillow(PIL), ima naslednje atribute.
size
width
height
Velikost je naslednji 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
Širino in višino lahko dobite tudi kot atributa.width
, height
print('width: ', im.width) print('height:', im.height) # width: 400 # height: 225
Enako velja za sivinske (enobarvne) slike.
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