Ermittlung der Bildgröße (Breite und Höhe) mit Python, OpenCV und Pillow(PIL)

Geschäft

In Python gibt es mehrere Bibliotheken für den Umgang mit Bildern, wie OpenCV und Pillow (PIL). Dieser Abschnitt erklärt, wie man die Bildgröße (Breite und Höhe) für jede dieser Bibliotheken ermittelt.

Sie können die Bildgröße (Breite und Höhe) als Tupel erhalten, indem Sie shape für OpenCV und size für Pillow (PIL) verwenden, aber beachten Sie, dass die Reihenfolge der beiden unterschiedlich ist.

Hier finden Sie die folgenden Informationen.

  • OpenCV
    • ndarray.shape:Abfrage der Bildgröße (Breite, Höhe)
      • Für Farbbilder
      • Für Graustufenbilder (monochrom)
  • Pillow(PIL)
    • size,width,height:Abfrage der Bildgröße (Breite, Höhe)

Im folgenden Artikel erfahren Sie, wie Sie die Größe (Kapazität) einer Datei anstelle der Bildgröße (Größe) ermitteln können.

OpenCV: ndarray.shape: Abfrage der Bildgröße (Breite, Höhe)

Wenn eine Bilddatei in OpenCV geladen wird, wird sie als NumPy-Array ndarray behandelt, und die Größe des Bildes (Breite und Höhe) kann über das Attribut shape ermittelt werden, das die Form des ndarray angibt.

Nicht nur in OpenCV, sondern auch wenn eine Bilddatei in Pillow geladen und in ein ndarray konvertiert wird, wird die Größe des durch das ndarray repräsentierten Bildes mit Hilfe von shape ermittelt.

Für Farbbilder

Im Falle von Farbbildern wird das folgende dreidimensionale ndarray verwendet.

  • Reihe (Höhe)
  • Zeile (Breite)
  • Farbe (3)

shape ist ein Tupel aus den oben genannten Elementen.

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

Um jeden Wert einer Variablen zuzuweisen, entpacken Sie das Tupel wie folgt.

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

_
Beim Entpacken eines Tupels kann der obige Wert konventionell als Variable für Werte zugewiesen werden, die danach nicht mehr verwendet werden. Wenn zum Beispiel die Anzahl der Farben (Anzahl der Kanäle) nicht verwendet wird, wird Folgendes verwendet.

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

Er kann auch unverändert verwendet werden, indem er durch einen Index (index) angegeben wird, ohne ihn einer Variablen zuzuweisen.

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

(width, height)
Wenn Sie dieses Tupel erhalten möchten, können Sie slice verwenden und folgendes schreiben: cv2.resize(), usw. Wenn Sie das Argument nach Größe spezifizieren wollen, verwenden Sie dies.

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

Für Graustufenbilder (monochrom)

Im Falle von Graustufenbildern (monochrom) wird das folgende zweidimensionale ndarray verwendet.

  • Reihe (Höhe)
  • Zeile (Breite)

Die Form wird dieses Tupel sein.

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

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

Grundsätzlich gilt dasselbe wie für Farbbilder.

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

Wenn Sie die Breite und Höhe Variablen zuweisen möchten, können Sie dies wie folgt tun, unabhängig davon, ob das Bild in Farbe oder in Graustufen vorliegt.

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

(width, height)
Wenn Sie dieses Tupel erhalten möchten, können Sie Slices verwenden und es wie folgt schreiben. Der folgende Schreibstil kann unabhängig davon verwendet werden, ob das Bild in Farbe oder in Graustufen vorliegt.

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

Pillow(PIL): size, width, height: Abfrage der Bildgröße (Breite, Höhe)

Das durch das Lesen eines Bildes mit Pillow(PIL) erhaltene Bildobjekt hat die folgenden Attribute.

  • size
  • width
  • height

Die Größe ist das folgende 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

Sie können auch die Breite und Höhe als Attribute erhalten.
width, height

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

Das Gleiche gilt für Graustufenbilder (monochrome Bilder).

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