Obtener el tamaño de la imagen (ancho y alto) con Python, OpenCV y Pillow(PIL)

Negocio

En Python existen varias librerías para el manejo de imágenes, como OpenCV y Pillow (PIL). Esta sección explica cómo obtener el tamaño de la imagen (ancho y alto) para cada una de ellas.

Puedes obtener el tamaño de la imagen (ancho y alto) como una tupla usando shape para OpenCV y size para Pillow (PIL), pero ten en cuenta que el orden de cada uno es diferente.

La siguiente información se proporciona aquí.

  • OpenCV
    • ndarray.shape:Obtener el tamaño de la imagen (ancho, alto)
      • Para las imágenes en color
      • Para imágenes en escala de grises (monocromas)
  • Pillow(PIL)
    • size,width,height:Obtener el tamaño de la imagen (ancho, alto)

Consulte el siguiente artículo sobre cómo obtener el tamaño (capacidad) de un archivo en lugar del tamaño de la imagen (tamaño).

OpenCV: ndarray.shape: Obtener el tamaño de la imagen (ancho, alto)

Cuando se carga un archivo de imagen en OpenCV, se trata como un array NumPy ndarray, y el tamaño de la imagen (ancho y alto) se puede obtener a partir del atributo shape, que indica la forma del ndarray.

No sólo en OpenCV, sino también cuando se carga un archivo de imagen en Pillow y se convierte en un ndarray, el tamaño de la imagen representada por el ndarray se obtiene mediante shape.

Para las imágenes en color

En el caso de las imágenes en color, se utiliza el siguiente ndarray tridimensional.

  • Fila (altura)
  • Fila (ancho)
  • Color (3)

shape es una tupla de los elementos anteriores.

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 asignar cada valor a una variable, desempaca la tupla de la siguiente manera.

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

_
Al desempaquetar una tupla, lo anterior puede asignarse convencionalmente como una variable para los valores que no se utilizarán después. Por ejemplo, si no se utiliza el número de colores (número de canales), se utiliza lo siguiente.

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

También se puede utilizar tal cual especificándolo por el índice (index) sin asignarlo a una variable.

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

(width, height)
Si quieres obtener esta tupla, puedes usar slice y escribir lo siguiente: cv2.resize(), etc. Si quieres especificar el argumento por tamaño, usa esto.

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

Para imágenes en escala de grises (monocromas)

En el caso de las imágenes en escala de grises (monocromas), se utiliza la siguiente ndarray bidimensional.

  • Fila (altura)
  • Fila (ancho)

La forma será esta tupla.

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

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

Básicamente lo mismo que para las imágenes en color.

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

Si desea asignar la anchura y la altura a las variables, puede hacerlo de la siguiente manera, tanto si la imagen está en color como en escala de grises.

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

(width, height)
Si desea obtener esta tupla, puede utilizar rebanadas y escribirla de la siguiente manera. El siguiente estilo de escritura se puede utilizar tanto si la imagen está en color como en escala de grises.

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

Pillow(PIL): size, width, height: Obtener el tamaño de la imagen (ancho, alto)

El objeto imagen obtenido al leer una imagen con Pillow(PIL) tiene los siguientes atributos.

  • size
  • width
  • height

El tamaño es la siguiente tupla.
(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

También puedes obtener la anchura y la altura respectivamente como atributos.
width, height

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

Lo mismo ocurre con las imágenes en escala de grises (monocromas).

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
Copied title and URL