Få billedstørrelsen (bredde og højde) med Python, OpenCV og Pillow(PIL)

Forretning

I Python findes der flere biblioteker til håndtering af billeder, f.eks. OpenCV og Pillow (PIL). Dette afsnit forklarer, hvordan man får billedstørrelsen (bredde og højde) for hvert af dem.

Du kan få billedstørrelsen (bredde og højde) som en tupel ved hjælp af shape for OpenCV og size for Pillow (PIL), men bemærk, at rækkefølgen af hver af dem er forskellig.

Her findes følgende oplysninger.

  • OpenCV
    • ndarray.shape:Hent billedstørrelsen (bredde, højde)
      • For farvebilleder
      • For billeder i gråskala (monokromt)
  • Pillow(PIL)
    • size,width,height:Hent billedstørrelsen (bredde, højde)

Se følgende artikel om, hvordan du får størrelsen (kapaciteten) af en fil i stedet for billedstørrelsen (størrelse).

OpenCV: ndarray.shape: Hent billedstørrelsen (bredde, højde)

Når en billedfil indlæses i OpenCV, behandles den som et NumPy-array ndarray, og billedets størrelse (bredde og højde) kan fås fra attributten shape, som angiver ndarrayets form.

Ikke kun i OpenCV, men også når en billedfil indlæses i Pillow og konverteres til et ndarray, fås størrelsen af det billede, der repræsenteres af ndarrayet, ved hjælp af shape.

For farvebilleder

I tilfælde af farvebilleder anvendes følgende tredimensionale ndarray.

  • Række (højde)
  • Række (bredde)
  • Farve (3)

shape er en tupel af de ovennævnte elementer.

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

Hvis du vil tildele hver værdi til en variabel, skal du pakke tuplen ud på følgende måde.

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

_
Ved udpakning af en tupel kan ovenstående på konventionel vis tildeles som en variabel for værdier, der ikke vil blive brugt efterfølgende. Hvis f.eks. antallet af farver (antal kanaler) ikke anvendes, anvendes følgende.

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

Det kan også bruges som det er ved at angive det ved indeks (index) uden at tildele det til en variabel.

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

(width, height)
Hvis du vil have denne tupel, kan du bruge slice og skrive følgende: cv2.resize(), osv. Hvis du ønsker at angive argumentet efter størrelse, skal du bruge dette.

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

For billeder i gråskala (monokromt)

I tilfælde af gråtonebilleder (monokrome billeder) anvendes følgende todimensionale ndarray.

  • Række (højde)
  • Række (bredde)

Formen vil være denne tupel.

im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)

print(im_gray.shape)
print(type(im_gray.shape))
# (225, 400)
# <class 'tuple'>

I princippet det samme som for farvebilleder.

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

Hvis du vil tildele bredden og højden til variabler, kan du gøre det på følgende måde, uanset om billedet er i farve eller gråtoneskala.

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

(width, height)
Hvis du vil have denne tupel, kan du bruge skiver og skrive den som følger. Følgende skrivestil kan bruges, uanset om billedet er i farver eller gråtoneskala.

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

Pillow(PIL): size, width, height: Hent billedstørrelsen (bredde, højde)

Billedobjektet, der opnås ved at læse et billede med Pillow(PIL), har følgende attributter.

  • size
  • width
  • height

Størrelsen er følgende tupel.
(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

Du kan også få henholdsvis bredde og højde som attributter.
width, height

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

Det samme gælder for gråtonebilleder (monokrome billeder).

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