Python OpenCV cv2 Redimensionar imagen

Para cambiar el tamaño de una imagen en Python, puede utilizar la función «cv2.resize()» de la biblioteca «cv2» de OpenCV.

El cambio de tamaño, por defecto, sólo cambia la anchura y la altura de la imagen. La relación de aspecto puede ser preservada o no, en base a los requerimientos. La relación de aspecto puede ser preservada mediante el cálculo de la anchura o la altura para una altura o anchura determinada, respectivamente.

En este tutorial, vamos a aprender cómo cambiar el tamaño de la imagen en Python utilizando la biblioteca OpenCV.

Sintaxis de la función cv2 resize()

La siguiente es la sintaxis de la función «cv2.resize()«.

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolación]]]])

donde

  • src: es la imagen fuente, original o de entrada, en forma de matriz numpy
  • dsize: es el tamaño deseado de la imagen de salida, dado como tupla
  • fx: es el factor de escala a lo largo del eje X o eje horizontal
  • fy: es el factor de escala a lo largo del eje Y o eje vertical
  • La interpolación: puede ser uno de los siguientes valores
    • INTER_NEAREST
    • INTER_LINEAR
    • INTER_AREA
    • INTER_CUBO
    • INTER_LANCZOS4

Según la técnica de interpolación seleccionada, se utiliza el algoritmo correspondiente. La interpolación es un método que decide qué píxel recibe qué valor en función de sus píxeles vecinos y de la escala a la que se redimensiona la imagen.

¿Cómo se puede cambiar el tamaño de una imagen?

Puede cambiar el tamaño de una imagen de tres maneras.

  1. Conservar la relación de aspecto y aumentar o disminuir la anchura y la altura de la imagen. Para que quede claro, la relación de aspecto es la relación entre el ancho y el alto de la imagen.
  2. Escalar la imagen sólo a lo largo del eje X o eje horizontal. Es decir, cambiar la anchura, manteniendo la altura igual que la de la imagen original.
  3. Escalar la imagen sólo a lo largo del eje Y o eje vertical. Es decir, cambiar la altura, manteniendo la anchura de la imagen original.

Imagen Fuente

Considere la siguiente imagen. Utilizaremos esta imagen como imagen de entrada o fuente en nuestros programas de ejemplo en curso.

Python OpenCV cv2 Redimensionar imagen base

Ejemplo 1: Cambiar el tamaño de la imagen – cv2.resize()

En el siguiente ejemplo, vamos a ver cómo podemos redimensionar la imagen anterior utilizando «cv2.resize()» preservando la relación de aspecto. Vamos a redimensionar la imagen al 50% de su forma real, es decir, vamos a reducir su altura al 50% de su original y su anchura al 50% de su original.

import cv2
 
src = cv2.imread('D:/cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)

#Porcentaje en el que se redimensiona la imagen
scale_percent = 50

#calcular el 50 por ciento de las dimensiones originales
width = int(src.shape[1] * scale_percent / 100)
height = int(src.shape[0] * scale_percent / 100)

# dsize
dsize = (width, height)

# cambiar el tamaño de la image
output = cv2.resize(src, dsize)

cv2.imwrite('D:/cv2-resize-image-50.png',output) 

¿Qué hemos hecho en el programa de Python anterior?

  1. «cv2.imread()» lee el archivo dado en «cv2.IMREAD_UNCHANGED» con el canal de transparencia (si lo hay) y devuelve un array numpy con los valores de los píxeles.
  2. «scale_percent» se establece en 50. Vamos a escalar la imagen al 50% de sus dimensiones originales, tanto el ancho como el alto.
  3. src.shape[1] da el ancho de la imagen de origen. «int(src.shape[1] * scale_percent / 100)» calcula el 50% del ancho original. Del mismo modo se calcula la altura.
  4. A continuación, establecemos el tamaño deseado «dsize» con la anchura (width) y la altura (height) recién calculadas.
  5. «cv2.resize» redimensiona la imagen «src» al tamaño «dsize» y devuelve el array numpy.
  6. Usando «cv2.imwrite«, escribimos el resultado de «cv2.resize» en un archivo de imagen local.
Python OpenCV cv2 imagen redimencionada
Imagen redimencionada con cv2.resize() preservando la relación de aspecto.

Ejemplo 2: cv2 Redimensionando la imagen horizontalmente

En el siguiente ejemplo, escalaremos la imagen sólo a lo largo del eje x o eje horizontal. Y mantenemos la altura de la imagen sin cambios.

En el «dsize«, mantendremos la altura igual a la de la imagen original pero cambiaremos el ancho.

import cv2
 
src = cv2.imread('D:/cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)

# Establecer una nueva anchura en píxeles
new_width = 300

# dsize
dsize = (new_width, src.shape[0])

# redimencionar la image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)

cv2.imwrite('D:/cv2-resize-image-width.png',output) 
Imagen redimencionada con «cv2.resize()» a lo ancho o en el eje horizontal

cv2 Cambiar el tamaño de la imagen verticalmente

En el siguiente ejemplo, escalaremos la imagen sólo a lo largo del eje y o eje vertical. La anchura de la imagen de salida no cambia con respecto a la imagen de origen.

En el «dsize«, mantendremos el ancho igual que el de la imagen original pero cambiaremos la altura.

import cv2
 
src = cv2.imread('D:/cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)

# Estableciendo una nueva altura en pixeles
new_height = 200

# dsize
dsize = (src.shape[1], new_height)

# redimencionando image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)

cv2.imwrite('D:/cv2-resize-image-height.png',output) 
Imagen redimencionada verticalmente con cv2
Imagen redimencionada con «cv2.resize()» solo la altura o eje vertical

En este tutorial de Ejemplos de Python, hemos aprendido a utilizar la función «cv2.resize()» de OpenCV, para redimensionar una imagen a lo largo del ancho, el alto o ambos preservando la relación de aspecto o no preservando la relación de aspecto.

Un comentario para “Python OpenCV cv2 Redimensionar imagen

  1. Miguel Rabin dice:

    Muchisimas gracias, muy bien explicado y muy util

Deja una respuesta