Obținerea dimensiunii imaginii (lățime și înălțime) cu Python, OpenCV și Pillow(PIL)

Afaceri

În Python există mai multe biblioteci pentru manipularea imaginilor, cum ar fi OpenCV și Pillow (PIL). Această secțiune explică cum să obțineți dimensiunea imaginii (lățime și înălțime) pentru fiecare dintre ele.

Puteți obține dimensiunea imaginii (lățime și înălțime) sub forma unui tuplu folosind shape pentru OpenCV și size pentru Pillow (PIL), dar rețineți că ordinea este diferită pentru fiecare.

Aici sunt furnizate următoarele informații.

  • OpenCV
    • ndarray.shape:Obține dimensiunea imaginii (lățime, înălțime)
      • Pentru imagini color
      • Pentru imagini în tonuri de gri (monocrome)
  • Pillow(PIL)
    • size,width,height:Obține dimensiunea imaginii (lățime, înălțime)

Consultați următorul articol despre cum să obțineți dimensiunea (capacitatea) unui fișier în loc de dimensiunea imaginii (mărimea).

OpenCV: ndarray.shape: Obține dimensiunea imaginii (lățime, înălțime)

Atunci când un fișier imagine este încărcat în OpenCV, acesta este tratat ca o matrice NumPy ndarray, iar dimensiunea imaginii (lățime și înălțime) poate fi obținută din atributul shape, care indică forma matricei ndarray.

Nu numai în OpenCV, ci și atunci când un fișier imagine este încărcat în Pillow și convertit într-un ndarray, dimensiunea imaginii reprezentate de ndarray este obținută cu ajutorul formei.

Pentru imagini color

În cazul imaginilor color, se utilizează următorul ndarray tridimensional.

  • Rând (înălțime)
  • Rând (lățime)
  • Culoare (3)

shape este un tuplu de elemente de mai sus.

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

Pentru a atribui fiecare valoare unei variabile, descompuneți tupla după cum urmează.

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

_
Atunci când se despachetează un tupluplu, cele de mai sus pot fi atribuite în mod convențional ca variabile pentru valori care nu vor fi utilizate ulterior. De exemplu, dacă numărul de culori (numărul de canale) nu este utilizat, se folosește următoarea valoare.

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

Poate fi, de asemenea, utilizat ca atare, specificându-l prin indice (index) fără a-l atribui unei variabile.

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

(width, height)
Dacă doriți să obțineți acest tupluplu, puteți utiliza slice și să scrieți următoarele: cv2.resize(), etc. Dacă doriți să specificați argumentul prin dimensiune, utilizați următoarele.

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

Pentru imagini în tonuri de gri (monocrome)

În cazul imaginilor în tonuri de gri (monocrome), se utilizează următorul ndarray bidimensional.

  • Rând (înălțime)
  • Rând (lățime)

Forma va fi acest 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'>

Practic, același lucru ca și în cazul imaginilor color.

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

Dacă doriți să atribuiți lățimea și înălțimea variabilelor, puteți face acest lucru după cum urmează, indiferent dacă imaginea este color sau în tonuri de gri.

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

(width, height)
Dacă doriți să obțineți acest tupluplu, puteți utiliza felii și îl puteți scrie după cum urmează. Următorul stil de scriere poate fi utilizat indiferent dacă imaginea este color sau în tonuri de gri.

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

Pillow(PIL): size, width, height: Obține dimensiunea imaginii (lățime, înălțime)

Obiectul imagine obținut prin citirea unei imagini cu Pillow(PIL) are următoarele atribute.

  • size
  • width
  • height

Dimensiunea este următorul 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

De asemenea, puteți obține lățimea și, respectiv, înălțimea ca atribute.
width, height

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

Același lucru este valabil și pentru imaginile în tonuri de gri (monocrome).

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