Pridobivanje velikosti slike (širina in višina) s Pythonom, OpenCV in Pillow(PIL)

Posel

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