Dobivanje veličine slike (širina i visina) pomoću Pythona, OpenCV-a i jastuka (PIL)

Poslovanje

U Pythonu postoji nekoliko knjižnica za rukovanje slikama, kao što su OpenCV i Pillow (PIL). Ovaj odjeljak objašnjava kako dobiti veličinu slike (širina i visina) za svaku od njih.

Veličinu slike (širinu i visinu) možete dobiti kao tuple koristeći oblik za OpenCV i veličinu za jastuk (PIL), ali imajte na umu da je redoslijed svake od njih drugačiji.

Ovdje su navedene sljedeće informacije.

  • OpenCV
    • ndarray.shape:Dobijte veličinu slike (širina, visina)
      • Za slike u boji
      • Za slike u sivim tonovima (monokromatske).
  • Pillow(PIL)
    • size,width,height:Dobijte veličinu slike (širina, visina)

Pogledajte sljedeći članak o tome kako dobiti veličinu (kapacitet) datoteke umjesto veličine (veličine) slike.

OpenCV:ndarray.shape:Dobijte veličinu slike (širina, visina)

Kada se slikovna datoteka učita u OpenCV, ona se tretira kao NumPy niz ndarray, a veličina slike (širina i visina) može se dobiti iz oblika atributa, koji označava oblik ndarraya.

Ne samo u OpenCV-u, već i kada se slikovna datoteka učita u Pillow i pretvori u ndarray, veličina slike koju predstavlja ndarray dobiva se pomoću oblika.

Za slike u boji

U slučaju slika u boji, koristi se sljedeći trodimenzionalni ndarray.

  • red (visina)
  • Red (širina)
  • Boja (3)

oblik je skup gore navedenih elemenata.

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

Za dodjelu svake vrijednosti varijabli, raspakirajte tuple na sljedeći način.

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

_
Prilikom raspakiranja tuplea, gore navedeno može se konvencionalno dodijeliti kao varijabla za vrijednosti koje se nakon toga neće koristiti. Na primjer, ako se ne koristi broj boja (broj kanala), koristi se sljedeće.

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

Također se može koristiti onakav kakav jest tako da ga navedete indeksom (indeksom) bez dodjeljivanja varijabli.

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

(width, height)
Ako želite dobiti ovaj tuple, možete koristiti slice i napisati sljedeće: cv2.resize(), itd. Ako želite specificirati argument po veličini, upotrijebite ovo.

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

Za slike u sivim tonovima (monokromatske).

U slučaju sivih (jednobojnih) slika koristi se sljedeća dvodimenzionalna slika.

  • red (visina)
  • Red (širina)

Oblik će biti ovaj 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'>

U osnovi isto kao i za slike u boji.

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

Ako želite varijablama dodijeliti širinu i visinu, to možete učiniti na sljedeći način, bilo da je slika u boji ili u sivim tonovima.

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

(width, height)
Ako želite dobiti ovu torku, možete koristiti rezove i napisati je na sljedeći način. Sljedeći stil pisanja može se koristiti bilo da je slika u boji ili u sivim tonovima.

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

Pillow(PIL):size, width, height:Dobijte veličinu slike (širina, visina)

Objekt slike dobiven čitanjem slike s jastukom (PIL) ima sljedeće atribute.

  • size
  • width
  • height

Veličina je sljedeća 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

Također možete dobiti širinu i visinu kao atribute.
width,height

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

Isto vrijedi i za slike u sivim tonovima (monokromatske).

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