En este pequeño post enseñaré como cambiar el tamaño de una imagen en Python con opencv. Python es un lenguaje que resulta útil, para llevar a cabo muchas tareas necesarias, incluido el tratamiento de imágenes, que pueden exigir diferentes niveles de complejidad.
Consideremos primero que una imagen es un array
, que puede ser tratado como un objeto numpy.
El método resize()
de Python no es efectivo en este caso, ya que no tiene en cuenta el eje, y debido a esto no es capaz de extrapolar y/o interpolar.
El módulo opencv
se usa en Python para la visión por computadora y el procesamiento de imágenes.
El procedimiento en esencia es leer primero la imagen empleando la función imread()
, y luego cambiar su dimensión empleando función resize()
.
La sintaxis seria así:
dst = cv2.resize(src, dsize[, fx[, fy[, interpolation]]]])
Donde fx
y fy
son factores de escala a lo largo de los ejes x e y, dsize()
se refiere al tamaño de la imagen de salida y el indicador de interpolación se refiere al método que vamos a usar.
Ya sea que se especifique (fx, fy)
o dsize
, OpenCV calcula el otro automáticamente.
Lo primero es disponer de opencv
en el ordenador, para ello deberás descargarla y tenerla ya instalada. Puedes seguir las instrucciones acá .
import cv2
import numpy as np
img = cv2.imread('archivo.jpeg')
res = cv2.resize(img, dsize=(54,140),interpolation=cv2.INTER_CUBIC)
Podemos emplear como interpolación las siguientes:
Nearest Neighbor:
near_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_NEAREST)
la bilineal,
bilinear_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_LINEAR)
o la bicúbica que teníamos en el ejemplo inicial
bicubic_img = cv2.resize(img,None, fx = 10, fy = 10, interpolation = cv2.INTER_CUBIC)
Todas emplean algoritmos diferentes, y su efectividad varía de un caso a otro.
Y hasta aquí, esto es todo.
Espero que esto sirva de ayuda a alguien.
La ignorancia, es la muerte de los vivos