Recortar una imagen de forma circular usando Python

En este artículo, aprenderemos a recortar una imagen circularmente utilizando una biblioteca de Pillows. Recortar una imagen circularmente significa seleccionar una región circular dentro de una imagen y eliminar todo lo que está fuera del círculo. 

Acercarse:

  • Si tiene una imagen en modo L, la imagen se vuelve en escala de grises. Entonces creamos una nueva imagen con el modo «L».
  • Se crea una imagen con un círculo blanco en el medio con las mismas dimensiones que la imagen de entrada.
  • Convierta una nueva imagen en una array.
  • Convierte la imagen original de una array.
  • Apila estas dos arrays juntas para recortar solo la parte central circular.

Tomemos esta imagen inicial:

Paso 1: importa el módulo y lee la imagen.

Python3

import numpy as np
from PIL import Image, ImageDraw
  
  
img = Image.open("/content/gfg.jpeg")
display(img)

Producción:

Paso 2: Crea una imagen.

Usaremos la función pieslice() para obtener la parte circular de la imagen en blanco, luego superpondremos la imagen original y la imagen luminosa.

ImageDraw.Draw.pieslice() Igual que arco, pero también dibuja líneas rectas entre los puntos finales y el centro del cuadro delimitador.

Sintaxis: PIL.ImageDraw.Draw.pieslice(xy, inicio, fin, relleno=Ninguno, contorno=Ninguno)

Parámetros:
xy : cuatro puntos para definir el cuadro delimitador. Secuencia de [(x0, y0), (x1, y1)] o [x0, y0, x1, y1].
inicio : ángulo de inicio, en grados. Los ángulos se miden desde las 3 en punto, aumentando en el sentido de las agujas del reloj.
end – Ángulo final, en grados.
relleno : color que se utilizará para el relleno.
contorno : color que se utilizará para el contorno.

Devuelve: un objeto de imagen en forma de rebanada de pastel.

Código:

Python3

h,w = img.size
  
# creating luminous image
lum_img = Image.new('L',[h,w] ,0) 
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0),(h,w)],0,360,fill=255)
img_arr = np.array(img)
lum_img_arr = np.array(lum_img)
display(Image.fromarray(lum_img_arr))

Producción:

 

Paso 3: apile estas dos arrays juntas para recortar solo la parte central circular.

Python3

final_img_arr = np.dstack((img_arr, lum_img_arr))
display(Image.fromarray(final_img_arr))

Producción:

A continuación se muestra la implementación completa:

Python3

import numpy as np
from PIL import Image, ImageDraw
  
img=Image.open("img.jpg")
display(img)
  
height,width = img.size
lum_img = Image.new('L', [height,width] , 0)
  
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0), (height,width)], 0, 360, 
              fill = 255, outline = "white")
img_arr =np.array(img)
lum_img_arr =np.array(lum_img)
display(Image.fromarray(lum_img_arr))
final_img_arr = np.dstack((img_arr,lum_img_arr))
display(Image.fromarray(final_img_arr))

Producción:

Publicación traducida automáticamente

Artículo escrito por soumibardhan10 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 *