De grootte (breedte en hoogte) van een afbeelding bepalen met Python, OpenCV en Pillow(PIL)

Bedrijf

In Python zijn er verschillende bibliotheken om met afbeeldingen om te gaan, zoals OpenCV en Pillow (PIL). Deze sectie legt uit hoe je de afbeeldingsgrootte (breedte en hoogte) voor elk van hen kunt krijgen.

U kunt de beeldgrootte (breedte en hoogte) verkrijgen als een tupel met behulp van shape voor OpenCV en size voor Pillow (PIL), maar merk op dat de volgorde van beide verschillend is.

De volgende informatie wordt hier verstrekt.

  • OpenCV
    • ndarray.shape:Verkrijg de beeldgrootte (breedte, hoogte)
      • Voor afbeeldingen in kleur
      • Voor afbeeldingen in grijstinten (monochroom)
  • Pillow(PIL)
    • size,width,height:Verkrijg de beeldgrootte (breedte, hoogte)

Zie het volgende artikel over hoe je de grootte (capaciteit) van een bestand kunt krijgen in plaats van de afbeeldingsgrootte (grootte).

OpenCV: ndarray.shape: Verkrijg de beeldgrootte (breedte, hoogte)

Wanneer een beeldbestand wordt geladen in OpenCV, wordt het behandeld als een NumPy array ndarray, en de grootte van het beeld (breedte en hoogte) kan worden verkregen uit het attribuut shape, dat de vorm van de ndarray aangeeft.

Niet alleen in OpenCV, maar ook wanneer een beeldbestand in Pillow wordt geladen en geconverteerd naar een ndarray, wordt de grootte van het beeld dat door de ndarray wordt gerepresenteerd, verkregen met behulp van shape.

Voor afbeeldingen in kleur

In het geval van kleurenbeelden wordt de volgende driedimensionale ndarray gebruikt.

  • Rij (hoogte)
  • Rij (breedte)
  • Kleur (3)

vorm is een tupel van de bovenstaande elementen.

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

Om elke waarde aan een variabele toe te kennen, pak je de tuple als volgt uit.

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

_
Bij het uitpakken van een tupel kan het bovenstaande conventioneel als variabele worden toegewezen voor waarden die daarna niet meer worden gebruikt. Bijvoorbeeld, indien het aantal kleuren (aantal kanalen) niet wordt gebruikt, wordt het volgende gebruikt.

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

Het kan ook worden gebruikt zoals het is door het te specificeren met index (index) zonder het toe te wijzen aan een variabele.

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

(width, height)
Indien je deze tuple wil verkrijgen, kan je slice gebruiken en het volgende schrijven: cv2.resize(), enz. Indien je het argument wil specificeren volgens grootte, gebruik dan dit.

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

Voor afbeeldingen in grijstinten (monochroom)

In het geval van afbeeldingen in grijstinten (monochroom) wordt de volgende tweedimensionale ndarray gebruikt.

  • Rij (hoogte)
  • Rij (breedte)

De vorm zal deze tupel zijn.

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

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

In principe hetzelfde als voor kleurenbeelden.

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

Als u de breedte en hoogte aan variabelen wilt toekennen, kunt u dat als volgt doen, ongeacht of de afbeelding in kleur of grijstinten is.

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

(width, height)
Als u deze tuple wilt krijgen, kunt u slices gebruiken en het als volgt schrijven. De volgende schrijfwijze kan worden gebruikt ongeacht of het beeld in kleur of grijstinten is.

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

Pillow(PIL): size, width, height: Verkrijg de beeldgrootte (breedte, hoogte)

Beeldobject verkregen door het lezen van een beeld met Pillow(PIL) heeft de volgende attributen.

  • size
  • width
  • height

De grootte is de volgende tupel.
(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

U kunt ook de breedte en hoogte respectievelijk als attributen krijgen.
width, height

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

Hetzelfde geldt voor afbeeldingen in grijstinten (monochroom).

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