Saltar al contenido

Numpy Cambiar el tamaño/Reescalar la imagen

Presta atención porque en este post encontrarás el arreglo que buscas.Esta reseña ha sido probado por nuestros expertos para garantizar la calidad y veracidad de nuestro contenido.

Solución:

Si, puedes instalar opencv (esta es una biblioteca utilizada para el procesamiento de imágenes y la visión por computadora), y use el cv2.resize función. Y por ejemplo usar:

import cv2
import numpy as np

img = cv2.imread('your_image.jpg')
res = cv2.resize(img, dsize=(54, 140), interpolation=cv2.INTER_CUBIC)

Aquí img es por lo tanto un numpy array que contiene la imagen original, mientras que res es un numpy array que contiene el redimensionado imagen. Un aspecto importante es el interpolation parámetro: hay varias formas de cambiar el tamaño de una imagen. Especialmente porque reduce la escala de la imagen y el tamaño de la imagen original es no un múltiplo del tamaño de la imagen redimensionada. Los posibles esquemas de interpolación son:

  • INTER_NEAREST – una interpolación del vecino más cercano
  • INTER_LINEAR – una interpolación bilineal (usada por defecto)
  • INTER_AREA – remuestreo utilizando la relación de área de píxeles. Puede ser un método preferido para la destrucción de imágenes, ya que proporciona resultados sin muaré. Pero cuando se amplía la imagen, es similar a la
    INTER_NEAREST método.
  • INTER_CUBIC – una interpolación bicúbica sobre un vecindario de 4×4 píxeles
  • INTER_LANCZOS4 – una interpolación de Lanczos sobre un vecindario de 8×8 píxeles

Al igual que con la mayoría de las opciones, no existe la opción “mejor” en el sentido de que para cada esquema de cambio de tamaño, hay escenarios en los que se puede preferir una estrategia sobre otra.

Si bien es posible usar numpy solo para hacer esto, la operación no está integrada. Dicho esto, puedes usar scikit-image (que se basa en numpy) para hacer este tipo de manipulación de imágenes.

La documentación de cambio de escala de Scikit-Image está aquí.

Por ejemplo, podría hacer lo siguiente con su imagen:

from skimage.transform import resize
bottle_resized = resize(bottle, (140, 54))

Esto se encargará de cosas como la interpolación, el suavizado, etc. por usted.

Para las personas que vienen aquí desde Google y buscan una forma rápida de reducir la resolución de las imágenes en numpy matrices para usar en aplicaciones de aprendizaje automático, aquí hay un método súper rápido (adaptado de aquí). Este método solo funciona cuando las dimensiones de entrada son un múltiplo de las dimensiones de salida.

Los siguientes ejemplos reducen la resolución de 128×128 a 64×64 (esto se puede cambiar fácilmente).

Último pedido de canales

# large image is shape (128, 128, 3)
# small image is shape (64, 64, 3)
input_size = 128
output_size = 64
bin_size = input_size // output_size
small_image = large_image.reshape((output_size, bin_size, 
                                   output_size, bin_size, 3)).max(3).max(1)

Primeros pedidos de canales

# large image is shape (3, 128, 128)
# small image is shape (3, 64, 64)
input_size = 128
output_size = 64
bin_size = input_size // output_size
small_image = large_image.reshape((3, output_size, bin_size, 
                                      output_size, bin_size)).max(4).max(2)

Para imágenes en escala de grises simplemente cambie el 3 a un 1 como esto:

Primeros pedidos de canales

# large image is shape (1, 128, 128)
# small image is shape (1, 64, 64)
input_size = 128
output_size = 64
bin_size = input_size // output_size
small_image = large_image.reshape((1, output_size, bin_size,
                                      output_size, bin_size)).max(4).max(2)

Este método utiliza el equivalente de agrupación máxima. Es la forma más rápida de hacer esto que he encontrado.

Reseñas y calificaciones del tutorial

Recuerda que tienes permiso de interpretar si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *