Obtenir la taille d’une image (largeur et hauteur) avec Python, OpenCV et Pillow(PIL)

Affaires

En Python, il existe plusieurs bibliothèques pour manipuler les images, comme OpenCV et Pillow (PIL). Cette section explique comment obtenir la taille de l'image (largeur et hauteur) pour chacune d'entre elles.

Vous pouvez obtenir la taille de l'image (largeur et hauteur) sous forme de tuple en utilisant shape pour OpenCV et size pour Pillow (PIL), mais notez que l'ordre de chacun est différent.

Les informations suivantes sont fournies ici.

  • OpenCV
    • ndarray.shape:Obtenir la taille de l'image (largeur, hauteur)
      • Pour les images en couleur
      • Pour les images en niveaux de gris (monochromes)
  • Pillow(PIL)
    • size,width,height:Obtenir la taille de l'image (largeur, hauteur)

Consultez l'article suivant pour savoir comment obtenir la taille (capacité) d'un fichier au lieu de la taille (dimension) de l'image.

OpenCV: ndarray.shape: Obtenir la taille de l'image (largeur, hauteur)

Lorsqu'un fichier image est chargé dans OpenCV, il est traité comme un tableau NumPy ndarray, et la taille de l'image (largeur et hauteur) peut être obtenue à partir de l'attribut shape, qui indique la forme du ndarray.

Non seulement dans OpenCV, mais aussi lorsqu'un fichier image est chargé dans Pillow et converti en un ndarray, la taille de l'image représentée par le ndarray est obtenue en utilisant shape.

Pour les images en couleur

Dans le cas des images en couleur, le tableau tridimensionnel suivant est utilisé.

  • Rangée (hauteur)
  • Rangée (largeur)
  • Couleur (3)

shape est un tuple des éléments ci-dessus.

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

Pour affecter chaque valeur à une variable, décompressez le tuple comme suit.

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

_
Lors du dépaquetage d'un tuple, ce qui précède peut être conventionnellement attribué comme variable pour les valeurs qui ne seront pas utilisées par la suite. Par exemple, si le nombre de couleurs (nombre de canaux) n'est pas utilisé, on utilise ce qui suit.

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

Il peut également être utilisé tel quel en le spécifiant par indice (index) sans l'assigner à une variable.

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

(width, height)
Si vous voulez obtenir ce tuple, vous pouvez utiliser slice et écrire ce qui suit : cv2.resize(), etc. Si vous voulez spécifier l'argument par taille, utilisez ceci.

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

Pour les images en niveaux de gris (monochromes)

Dans le cas d'images en niveaux de gris (monochromes), le tableau bidimensionnel suivant est utilisé.

  • Rangée (hauteur)
  • Rangée (largeur)

La forme sera ce 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'>

En principe, c'est la même chose que pour les images en couleur.

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

Si vous voulez attribuer la largeur et la hauteur à des variables, vous pouvez le faire comme suit, que l'image soit en couleur ou en niveaux de gris.

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

(width, height)
Si vous voulez obtenir ce tuple, vous pouvez utiliser des tranches et l'écrire comme suit. Le style d'écriture suivant peut être utilisé que l'image soit en couleur ou en niveaux de gris.

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

Pillow(PIL): size, width, height: Obtenir la taille de l'image (largeur, hauteur)

L'objet image obtenu par lecture d'une image avec Pillow(PIL) a les attributs suivants.

  • size
  • width
  • height

La taille est le tuple suivant.
(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

Vous pouvez également obtenir la largeur et la hauteur respectivement comme attributs.
width, height

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

Il en va de même pour les images en niveaux de gris (monochromes).

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