
Cet article décrit comment obtenir la taille de l’image (largeur, hauteur) en Python avec OpenCV et Pillow (PIL).
La taille de l’image peut être obtenue sous forme de tuple avec la forme d’attribut de ndarray dans OpenCV et la taille d’attribut de PIL.Image dans Pillow (PIL). Notez que l’ordre de la largeur et de la hauteur est différent.
- OpenCV : obtenir la taille de l’image (largeur, hauteur) avec ndarray.shape
- Pour l’image couleur
- Pour les images en niveaux de gris (monochrome)
- Oreiller (PIL): Obtenir la taille de l’image (largeur, hauteur) avec taille, largeur, hauteur
Consultez l’article suivant pour le redimensionnement de l’image.
Consultez l’article suivant pour savoir comment obtenir la taille d’un fichier en octets.
OpenCV : obtenir la taille de l’image (largeur, hauteur) avec ndarray.shape
Lorsqu’un fichier image est lu par OpenCV, il est traité comme un tableau NumPy ndarray. La taille (largeur, hauteur) de l’image peut être obtenue à partir de l’attribut shape.
Non limité à OpenCV, la taille de l’image représentée par ndarray, comme lorsqu’un fichier image est lu par Pillow et converti en ndarray, est obtenue par forme.
Pour l’image couleur
Dans le cas d’une image couleur, il s’agit d’un ndarray 3D de ligne (hauteur) x colonne (largeur) x couleur (3). shape est un tuple de (ligne (hauteur), colonne (largeur), couleur (3)).
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'>
Lors de l’affectation de 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 de la décompression d’un tuple, les valeurs qui ne sont pas utilisées après cela peuvent être affectées à _ par convention. Un exemple où le nombre de couleurs (nombre de canaux) n’est pas utilisé est le suivant.
h, w, _ = im.shape
print('width: ', w)
print('height:', h)
# width: 400
# height: 225
Bien sûr, vous pouvez aussi les obtenir directement par index.
print('width: ', im.shape[1])
print('height:', im.shape[0])
# width: 400
# height: 225
Si vous souhaitez obtenir des tuples dans l’ordre (largeur, hauteur), vous pouvez utiliser slice comme dans l’exemple suivant.
print(im.shape[1::-1])
# (400, 225)
Lorsque vous définissez la taille sur cv2.resize(), etc., elle doit être (largeur, hauteur).
Consultez l’article suivant pour plus de détails sur le découpage.
Pour les images en niveaux de gris (monochrome)
Pour les images en niveaux de gris (monochrome), il s’agit d’un ndarray 2D de lignes (hauteur) x colonnes (largeur). shape est un tuple de (ligne (hauteur), colonne (largeur)).
im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)
print(im_gray.shape)
print(type(im_gray.shape))
# (225, 400)
# <class 'tuple'>
Fondamentalement 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 souhaitez affecter une largeur et une hauteur à des variables, vous pouvez appliquer ce qui suit aux images 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
Si vous voulez obtenir un tuple (largeur, hauteur), vous pouvez utiliser slice. L’image peut être en couleur ou en niveaux de gris si elle est écrite comme suit.
print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)
Oreiller (PIL): Obtenir la taille de l’image (largeur, hauteur) avec la taille, la largeur, la hauteur
L’objet PIL.Image obtenu en lisant une image avec Pillow (PIL) a les attributs size, width et height.
size est un tuple (largeur, hauteur).
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
La largeur et la hauteur peuvent également être obtenues avec les attributs largeur et hauteur.
print('width: ', im.width)
print('height:', im.height)
# width: 400
# height: 225
Les images en niveaux de gris (monochrome) peuvent être traitées de la même manière.
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