Cambio de tamaño de imagen usando Seam carving usando OpenCV en Python

El tallado de costuras es una técnica eficaz de procesamiento de imágenes con la ayuda de la cual se puede cambiar el tamaño de una imagen sin eliminar elementos importantes de la imagen. El enfoque básico es encontrar todos los píxeles continuos con baja energía de izquierda a derecha o de arriba a abajo. Después de seleccionar la región, se elimina de la imagen original, dejando solo la parte relevante de la imagen. Un mapa de energía se deriva de la imagen original que representa los detalles correspondientes de la imagen. Con la ayuda del mapa de energía, podemos identificar las costuras que se extienden de derecha a izquierda o de arriba a abajo.

¿En qué se diferencia el tallado de costura del enfoque tradicional de cambio de tamaño?

El tallado de costura es diferente del cambio de tamaño en el sentido de que en el tallado de costura todos los aspectos y elementos valiosos aún están presentes en la imagen, pero el cambio de tamaño de la imagen simplemente se copia a un tamaño más nuevo, lo que puede ser responsable de la pérdida de detalles importantes.

A continuación se muestra la implementación de la técnica de tallado de costura:

Python3

# import the necessary libraries
from skimage import transform
from skimage import filters
import cv2
  
# read the input image
img = cv2.imread('Seam.jpg')
  
# convert image from BGR
# to GRAY scale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  
# filter out the gradient representation 
# image to further process for 
# seam carving algorithm
# filters.sobel() is used to 
# find edges in an image
filtered = filters.sobel(gray.astype("float"))
  
  
for i in range(20, 180, 20):
    
    # apply seam carve to the image, 
    # iterating over the image for
    # multiple frames
    # transform.seam_carve() can transform 
    # the  seam of image vertically as
    # well as horizontally
    carved_image = transform.seam_carve(img,
                                        filtered, 
                                        'vertical',
                                        i)
  
# show the original image
cv2.imshow("original", img)
  
# show the carved image
cv2.imshow("carved", carved_image)
  
# print shape of both images
print("Shape of original image ",
      img.shape)
print("Shape of Carved image ",
      carved_image.shape)
  
# wait 
cv2.waitKey(0)

Producción

Shape of original Image(667, 1000, 3)
Shape of Carved image (667, 840, 3)

Imagen original

imagen tallada

Nota: este código usa la versión 0.15.0 de scikit-image.

Publicación traducida automáticamente

Artículo escrito por KaranGupta5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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