A kép méretének (szélesség és magasság) meghatározása Python, OpenCV és Pillow(PIL) segítségével

Üzleti

A Pythonban számos könyvtár létezik képek kezelésére, például az OpenCV és a Pillow (PIL). Ez a szakasz elmagyarázza, hogyan kaphatjuk meg a kép méretét (szélesség és magasság) mindegyikük esetében.

A kép méretét (szélesség és magasság) az OpenCV esetében a shape, a Pillow (PIL) esetében pedig a size segítségével kaphatja meg, de vegye figyelembe, hogy a sorrendjük eltérő.

A következő információk itt találhatók.

  • OpenCV
    • ndarray.shape:A kép méretének lekérdezése (szélesség, magasság)
      • Színes képek esetén
      • Szürkeárnyalatos (monokróm) képek esetén
  • Pillow(PIL)
    • size,width,height:A kép méretének lekérdezése (szélesség, magasság)

Lásd a következő cikket arról, hogyan lehet a kép mérete (mérete) helyett a fájl méretét (kapacitását) megtudni.

OpenCV: ndarray.shape: A kép méretének lekérdezése (szélesség, magasság)

Amikor egy képfájlt betölt az OpenCV, azt egy NumPy ndarray tömbként kezeli, és a kép mérete (szélessége és magassága) a shape attribútumból kapható, amely az ndarray alakját jelzi.

Nemcsak az OpenCV-ben, hanem akkor is, amikor egy képfájlt betöltünk a Pillow-ban és ndarray-be konvertálunk, az ndarray által reprezentált kép méretét a shape segítségével kapjuk meg.

Színes képek esetén

Színes képek esetén a következő háromdimenziós ndarray-t használjuk.

  • Sor (magasság)
  • Sor (szélesség)
  • Szín (3)

shape a fenti elemekből álló halmaz.

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

Az egyes értékek változóhoz rendeléséhez csomagolja ki a tuple-t a következőképpen.

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

_
Egy tuple kicsomagolásakor a fentieket konvencionálisan változónak lehet rendelni olyan értékekhez, amelyeket a későbbiekben nem fogunk használni. Például, ha a színek számát (csatornák számát) nem használjuk, akkor a következőt használjuk.

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

Úgy is használható, ahogy van, ha indexszel (index) adjuk meg, anélkül, hogy egy változóhoz rendelnénk.

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

(width, height)
Ha ezt a tuple-t akarod megkapni, használhatod a slice-t, és a következőket írhatod: cv2.resize(), stb. Ha az argumentumot méret szerint akarod megadni, használd ezt.

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

Szürkeárnyalatos (monokróm) képek esetén

Szürkeárnyalatos (monokróm) képek esetén a következő kétdimenziós ndarray-t használjuk.

  • Sor (magasság)
  • Sor (szélesség)

A shape ez a tuple lesz.

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

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

Alapvetően ugyanaz, mint a színes képek esetében.

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

Ha a szélességet és a magasságot változókhoz szeretné rendelni, akkor ezt a következőképpen teheti meg, függetlenül attól, hogy a kép színes vagy szürkeárnyalatos.

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

(width, height)
Ha ezt a tuple-t szeretné megkapni, használhatja a szeleteket, és írja le a következőképpen. A következő írásmód használható, akár színes, akár szürkeárnyalatos a kép.

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

Pillow(PIL): size, width, height: A kép méretének lekérdezése (szélesség, magasság)

A Pillow(PIL) kép beolvasásával kapott képobjektum a következő attribútumokkal rendelkezik.

  • size
  • width
  • height

A méret a következő 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

A szélességet és a magasságot is megkaphatja attribútumként.
width, height

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

Ugyanez igaz a szürkeárnyalatos (monokróm) képekre is.

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