В Python има няколко библиотеки за работа с изображения, като OpenCV и Pillow (PIL). Този раздел обяснява как да получите размера на изображението (ширина и височина) за всяка от тях.
Можете да получите размера на изображението (ширина и височина) като кортеж, като използвате shape за OpenCV и size за Pillow (PIL), но имайте предвид, че редът на всяко от тях е различен.
Тук се предоставя следната информация.
- OpenCV
ndarray.shape
:Получаване на размера на изображението (ширина, височина)- За цветни изображения
- За изображения в сива скала (монохромни)
- Pillow(PIL)
size
,width
,height
:Получаване на размера на изображението (ширина, височина)
Вижте следната статия за това как да получите размера (капацитета) на даден файл вместо размера (размера) на изображението.
- Свързани статии:Получаване на размера на файл или директория (папка) в Python
OpenCV: ndarray.shape: Получаване на размера на изображението (ширина, височина)
Когато в OpenCV се зареди файл с изображение, той се третира като NumPy масив ndarray, а размерът на изображението (ширина и височина) може да се получи от атрибута shape, който указва формата на ndarray.
Не само в OpenCV, но и когато файл с изображение се зарежда в Pillow и се преобразува в ndarray, размерът на изображението, представено от ndarray, се получава с помощта на shape.
За цветни изображения
В случай на цветни изображения се използва следният триизмерен ndarray.
- Ред (височина)
- Ред (ширина)
- Цвят (3)
shape е кортеж от горните елементи.
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'>
За да присвоите всяка стойност на променлива, разопаковайте кортежа по следния начин.
h, w, c = im.shape print('width: ', w) print('height: ', h) print('channel:', c) # width: 400 # height: 225 # channel: 3
_
При разопаковане на кортеж горната част може да бъде условно присвоена като променлива за стойности, които няма да се използват след това. Например, ако броят на цветовете (броят на каналите) не се използва, се използва следното.
h, w, _ = im.shape print('width: ', w) print('height:', h) # width: 400 # height: 225
Той може да се използва и в този си вид, като се посочи чрез индекс (index), без да се присвоява на променлива.
print('width: ', im.shape[1]) print('height:', im.shape[0]) # width: 400 # height: 225
(width, height)
Ако искате да получите този кортеж, можете да използвате slice и да напишете следното: cv2.resize() и т.н. Ако искате да зададете аргумента по размер, използвайте това.
print(im.shape[1::-1]) # (400, 225)
За изображения в сива скала (монохромни)
В случай на сиви (монохромни) изображения се използва следният двуизмерен ndarray.
- Ред (височина)
- Ред (ширина)
Формата ще бъде този кортеж.
im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE) print(im_gray.shape) print(type(im_gray.shape)) # (225, 400) # <class 'tuple'>
В общи линии същото като при цветните изображения.
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
Ако искате да присвоите ширината и височината на променливи, можете да го направите по следния начин, независимо дали изображението е цветно или в сива гама.
h, w = im.shape[0], im.shape[1] print('width: ', w) print('height:', h) # width: 400 # height: 225
(width, height)
Ако искате да получите този кортеж, можете да използвате slices и да го запишете по следния начин. Следният стил на писане може да се използва, независимо дали изображението е цветно или в сиви мащаби.
print(im_gray.shape[::-1]) print(im_gray.shape[1::-1]) # (400, 225) # (400, 225)
Pillow(PIL): size, width, height: Получаване на размера на изображението (ширина, височина)
Обектът на изображението, получен чрез четене на изображение с Pillow(PIL), има следните атрибути.
size
width
height
Размерът е следният кортеж.(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
Можете също така да получите ширината и височината съответно като атрибути.width
, height
print('width: ', im.width) print('height:', im.height) # width: 400 # height: 225
Същото важи и за монохромните изображения в сива гама.
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