W Pythonie istnieje kilka bibliotek do obsługi obrazów, takich jak OpenCV i Pillow (PIL). Ta sekcja wyjaśnia, jak uzyskać rozmiar obrazu (szerokość i wysokość) dla każdej z nich.
Możesz uzyskać rozmiar obrazu (szerokość i wysokość) jako tuple używając shape dla OpenCV i size dla Pillow (PIL), ale zauważ, że kolejność każdego z nich jest inna.
Podane są tu następujące informacje.
- OpenCV
ndarray.shape
:Uzyskaj rozmiar obrazu (szerokość, wysokość)- Dla obrazów kolorowych
- Dla obrazów w skali szarości (monochromatycznych)
- Pillow(PIL)
size
,width
,height
:Uzyskaj rozmiar obrazu (szerokość, wysokość)
Zobacz poniższy artykuł o tym, jak uzyskać rozmiar (pojemność) pliku zamiast rozmiaru (wielkości) obrazu.
- Powiązane artykuły:Uzyskiwanie rozmiaru pliku lub katalogu (folderu) w Pythonie
OpenCV: ndarray.shape: Uzyskaj rozmiar obrazu (szerokość, wysokość)
Kiedy plik obrazu jest ładowany do OpenCV, jest on traktowany jako tablica NumPy ndarray, a rozmiar obrazu (szerokość i wysokość) może być uzyskany z atrybutu shape, który wskazuje kształt tablicy ndarray.
Nie tylko w OpenCV, ale także gdy plik graficzny jest ładowany w Pillow i konwertowany do tablicy ndarray, rozmiar obrazu reprezentowanego przez tablicę ndarray jest uzyskiwany przy użyciu shape.
Dla obrazów kolorowych
W przypadku obrazów kolorowych stosuje się następującą trójwymiarową tablicę ndarray.
- Rząd (wysokość)
- Rząd (szerokość)
- Kolor (3)
shape jest tuple'em powyższych elementów.
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'>
Aby przypisać każdą wartość do zmiennej, rozpakuj tuple w następujący sposób.
h, w, c = im.shape print('width: ', w) print('height: ', h) print('channel:', c) # width: 400 # height: 225 # channel: 3
_
Podczas rozpakowywania tuple, powyższe może być umownie przypisane jako zmienna dla wartości, które nie będą później używane. Na przykład, jeśli liczba kolorów (liczba kanałów) nie jest używana, używa się poniższego.
h, w, _ = im.shape print('width: ', w) print('height:', h) # width: 400 # height: 225
Może być również użyty jako taki, określając go przez indeks (index) bez przypisywania go do zmiennej.
print('width: ', im.shape[1]) print('height:', im.shape[0]) # width: 400 # height: 225
(width, height)
Jeśli chcesz uzyskać ten tuple, możesz użyć slice i napisać następujące: cv2.resize(), itd. Jeśli chcesz określić argument według rozmiaru, użyj tego.
print(im.shape[1::-1]) # (400, 225)
Dla obrazów w skali szarości (monochromatycznych)
W przypadku obrazów w skali szarości (monochromatycznych) stosowana jest następująca dwuwymiarowa tablica nd.
- Rząd (wysokość)
- Rząd (szerokość)
Kształtem będzie ta 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'>
Zasadniczo to samo, co w przypadku obrazów kolorowych.
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
Jeśli chcesz przypisać szerokość i wysokość do zmiennych, możesz to zrobić w następujący sposób, niezależnie od tego, czy obraz jest w kolorze czy w skali szarości.
h, w = im.shape[0], im.shape[1] print('width: ', w) print('height:', h) # width: 400 # height: 225
(width, height)
Jeśli chcesz uzyskać ten tuple, możesz użyć slices i napisać go w następujący sposób. Następujący styl pisania może być używany niezależnie od tego, czy obraz jest w kolorze, czy w skali szarości.
print(im_gray.shape[::-1]) print(im_gray.shape[1::-1]) # (400, 225) # (400, 225)
Pillow(PIL): size, width, height: Uzyskaj rozmiar obrazu (szerokość, wysokość)
Obiekt obrazu uzyskany w wyniku odczytu obrazu za pomocą Pillow(PIL) posiada następujące atrybuty.
size
width
height
Wielkość jest następującą 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
Możesz również uzyskać odpowiednio szerokość i wysokość jako atrybuty.width
, height
print('width: ', im.width) print('height:', im.height) # width: 400 # height: 225
To samo dotyczy obrazów w skali szarości (monochromatycznych).
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