Em Python existem várias bibliotecas para manipulação de imagens, tais como OpenCV e Pillow (PIL). Esta secção explica como obter o tamanho da imagem (largura e altura) para cada uma delas.
Pode obter o tamanho da imagem (largura e altura) como um tuple usando a forma para OpenCV e o tamanho para Pillow (PIL), mas note que a ordem de cada um é diferente.
A seguinte informação é fornecida aqui.
- OpenCV
ndarray.shape
:Obter o tamanho da imagem (largura, altura)- Para imagens a cores
- Para imagens em escala de cinzentos (monocromáticas)
- Pillow(PIL)
size
,width
,height
:Obter o tamanho da imagem (largura, altura)
Ver o artigo seguinte sobre como obter o tamanho (capacidade) de um ficheiro em vez do tamanho (tamanho) da imagem.
- Artigos relacionados:Obter o tamanho de um ficheiro ou directório (pasta) em Python
OpenCV: ndarray.shape: Obter o tamanho da imagem (largura, altura)
Quando um ficheiro de imagem é carregado no OpenCV, é tratado como um NumPy array ndarray, e o tamanho da imagem (largura e altura) pode ser obtido a partir da forma do atributo, que indica a forma do ndarray.
Não só no OpenCV, mas também quando um ficheiro de imagem é carregado em Pillow e convertido num ndarray, o tamanho da imagem representada pelo ndarray é obtido utilizando a forma.
Para imagens a cores
No caso de imagens a cores, é utilizado o seguinte ndarray tridimensional.
- Fila (altura)
- Fila (largura)
- Cor (3)
a forma é um tuple dos elementos acima referidos.
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'>
Para atribuir cada valor a uma variável, desembalar o tuple como se segue.
h, w, c = im.shape print('width: ', w) print('height: ', h) print('channel:', c) # width: 400 # height: 225 # channel: 3
_
Ao desempacotar um tuple, o acima referido pode ser convencionalmente atribuído como uma variável para valores que não serão utilizados posteriormente. Por exemplo, se o número de cores (número de canais) não for utilizado, é utilizado o seguinte.
h, w, _ = im.shape print('width: ', w) print('height:', h) # width: 400 # height: 225
Também pode ser utilizado como está, especificando-o por índice (index) sem o atribuir a uma variável.
print('width: ', im.shape[1]) print('height:', im.shape[0]) # width: 400 # height: 225
(width, height)
Se quiser obter este tuple, pode usar fatias e escrever o seguinte: cv2.resize(), etc. Se quiser especificar o argumento por tamanho, utilize este.
print(im.shape[1::-1]) # (400, 225)
Para imagens em escala de cinzentos (monocromáticas)
No caso de imagens em escala de cinzentos (monocromáticas), são utilizadas as seguintes imagens bidimensionais ndarray.
- Fila (altura)
- Fila (largura)
A forma será este 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'>
Basicamente o mesmo que para as imagens a cores.
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
Se quiser atribuir a largura e altura a variáveis, pode fazê-lo da seguinte forma, quer a imagem seja a cores ou em escala de cinzentos.
h, w = im.shape[0], im.shape[1] print('width: ', w) print('height:', h) # width: 400 # height: 225
(width, height)
Se quiser obter este tuple, pode usar fatias e escrevê-lo da seguinte forma. O seguinte estilo de escrita pode ser usado quer a imagem seja a cores ou em escala de cinzentos.
print(im_gray.shape[::-1]) print(im_gray.shape[1::-1]) # (400, 225) # (400, 225)
Pillow(PIL): size, width, height: Obter o tamanho da imagem (largura, altura)
O objecto de imagem obtido pela leitura de uma imagem com Pillow(PIL) tem os seguintes atributos.
size
width
height
O tamanho é o seguinte 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
Também se pode obter a largura e a altura, respectivamente, como atributos.width
, height
print('width: ', im.width) print('height:', im.height) # width: 400 # height: 225
O mesmo é válido para imagens em escala de cinzentos (monocromáticas).
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