Cómo dibujar un rectángulo en una imagen

Resuelto Kai ZHAO asked hace 8 años • 5 respuestas

Cómo dibujar un rectángulo en una imagen, como este: ingrese la descripción de la imagen aquí

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
im = np.array(Image.open('dog.png'), dtype=np.uint8)
plt.imshow(im)

Para que quede claro, quise dibujar un rectángulo encima de la imagen para visualización, no cambiar los datos de la imagen.

Entonces usar matplotlib.patches.Patch sería la mejor opción.

Kai ZHAO avatar May 25 '16 18:05 Kai ZHAO
Aceptado

Puede agregar un Rectangleparche a matplotlib Axes.

Por ejemplo (usando la imagen del tutorial aquí ):

import matplotlib.pyplot as plt
import matplotlib.patches as patches
from PIL import Image

im = Image.open('stinkbug.png')

# Create figure and axes
fig, ax = plt.subplots()

# Display the image
ax.imshow(im)

# Create a Rectangle patch
rect = patches.Rectangle((50, 100), 40, 30, linewidth=1, edgecolor='r', facecolor='none')

# Add the patch to the Axes
ax.add_patch(rect)

plt.show()

ingrese la descripción de la imagen aquí

tmdavison avatar May 25 '2016 12:05 tmdavison

No hay necesidad de subtramas y pyplot puede mostrar imágenes PIL, por lo que esto se puede simplificar aún más:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from PIL import Image

im = Image.open('stinkbug.png')

# Display the image
plt.imshow(im)

# Get the current reference
ax = plt.gca()

# Create a Rectangle patch
rect = Rectangle((50,100),40,30,linewidth=1,edgecolor='r',facecolor='none')

# Add the patch to the Axes
ax.add_patch(rect)

O la versión corta:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from PIL import Image

# Display the image
plt.imshow(Image.open('stinkbug.png'))

# Add the patch to the Axes
plt.gca().add_patch(Rectangle((50,100),40,30,linewidth=1,edgecolor='r',facecolor='none'))
James 'Fluffy' Burton avatar Dec 06 '2018 13:12 James 'Fluffy' Burton