Ottenere le dimensioni dell’immagine (larghezza e altezza) con Python, OpenCV e Pillow(PIL)

Attività commerciale

In Python ci sono diverse librerie per gestire le immagini, come OpenCV e Pillow (PIL). Questa sezione spiega come ottenere le dimensioni dell'immagine (larghezza e altezza) per ciascuna di esse.

Puoi ottenere la dimensione dell'immagine (larghezza e altezza) come tupla usando shape per OpenCV e size per Pillow (PIL), ma nota che l'ordine di ciascuno è diverso.

Le seguenti informazioni sono fornite qui.

  • OpenCV
    • ndarray.shape:Ottenere le dimensioni dell'immagine (larghezza, altezza)
      • Per le immagini a colori
      • Per le immagini in scala di grigi (monocromatiche)
  • Pillow(PIL)
    • size,width,height:Ottenere le dimensioni dell'immagine (larghezza, altezza)

Vedi il seguente articolo su come ottenere la dimensione (capacità) di un file invece della dimensione dell'immagine (dimensione).

OpenCV: ndarray.shape: Ottenere le dimensioni dell'immagine (larghezza, altezza)

Quando un file immagine viene caricato in OpenCV, viene trattato come un array NumPy ndarray, e la dimensione dell'immagine (larghezza e altezza) può essere ottenuta dall'attributo shape, che indica la forma dell'ndarray.

Non solo in OpenCV, ma anche quando un file immagine viene caricato in Pillow e convertito in un ndarray, la dimensione dell'immagine rappresentata dall'ndarray è ottenuta utilizzando shape.

Per le immagini a colori

Nel caso di immagini a colori, si usa il seguente ndarray tridimensionale.

  • Fila (altezza)
  • Fila (larghezza)
  • Colore (3)

shape è una tupla degli elementi di cui sopra.

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

Per assegnare ogni valore a una variabile, scompattare la tupla come segue.

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

_
Quando si scompatta una tupla, quanto sopra può essere assegnato convenzionalmente come variabile per valori che non saranno utilizzati in seguito. Per esempio, se il numero di colori (numero di canali) non viene utilizzato, si usa quanto segue.

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

Può anche essere usato così com'è specificandolo per indice (index) senza assegnarlo a una variabile.

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

(width, height)
Se volete ottenere questa tupla, potete usare slice e scrivere quanto segue: cv2.resize(), ecc. Se volete specificare l'argomento per dimensione, usate questo.

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

Per le immagini in scala di grigi (monocromatiche)

Nel caso di immagini in scala di grigi (monocromatiche), si usa la seguente matrice bidimensionale.

  • Fila (altezza)
  • Fila (larghezza)

La forma sarà questa tupla.

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

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

Fondamentalmente lo stesso che per le immagini a colori.

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

Se volete assegnare la larghezza e l'altezza alle variabili, potete farlo come segue, sia che l'immagine sia a colori o in scala di grigi.

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

(width, height)
Se volete ottenere questa tupla, potete usare slices e scriverla come segue. Il seguente stile di scrittura può essere usato se l'immagine è a colori o in scala di grigi.

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

Pillow(PIL): size, width, height: Ottenere le dimensioni dell'immagine (larghezza, altezza)

L'oggetto immagine ottenuto dalla lettura di un'immagine con Pillow(PIL) ha i seguenti attributi.

  • size
  • width
  • height

La dimensione è la seguente tupla.
(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

Potete anche ottenere la larghezza e l'altezza rispettivamente come attributi.
width, height

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

Lo stesso vale per le immagini in scala di grigi (monocromatiche).

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