Disegna un rettangolo sull'immagine in Matplotlib

Jinku Hu 12 aprile 2021
  1. Disegna Rettangolo in Matplotlib
  2. Disegna un rettangolo sull’immagine in Matplotlib
Disegna un rettangolo sull'immagine in Matplotlib

Quando abbiamo bisogno di disegnare un rettangolo su un’immagine o una figura semplice in Matplotlib, la patch rectangle da matplotlib.patches dovrebbe essere aggiunta agli assi con il metodo add_patch.

Un Matpotlib patch è un artista 2-D che ha una faccia e un colore dei bordi. Matplotlib ha patch come,

  • Arc
  • Arrow
  • ArrowStyle
  • BoxStyle
  • Circle
  • CirclePolygon
  • ConnectionPatch
  • ConnectionStyle
  • Ellipse
  • FancyArrow
  • FancyArrowPatch
  • FancyBboxPatch
  • Patch
  • Path
  • PathPatch
  • Polygon
  • Rectangle
  • RegularPolygon
  • Shadow
  • Wedge

La patch Rectangle disegna un rettangolo con una coordinata specificata dell’angolo inferiore sinistro e larghezza e altezza specificate.

Rectangle(xy, width, height, angle=0.0, fill=True, **kwargs)

xy è una tupla di lunghezza 2 per specificare le coordinate dell’angolo inferiore sinistro del rettangolo da disegnare,

width è la larghezza del rettangolo,

height è l’altezza del rettangolo,

angle è l’angolo in senso antiorario in gradi.

fill specifica se il rettangolo è riempito con il facecolor.

Alcuni kwarg validi sono,

  • edgecolor: il colore dei bordi del rettangolo
  • facecolor: il colore pieno del rettangolo

Disegna Rettangolo in Matplotlib

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig, ax = plt.subplots()

ax.plot([1, 4], [1, 4])

ax.add_patch(
    patches.Rectangle((1, 1), 0.5, 0.5, edgecolor="blue", facecolor="red", fill=True)
)

plt.show()

La patch rettangolo viene creata dal costruttore,

patches.Rectangle((1, 1), 1, 2, edgecolor="blue", facecolor="red", fill=True)

La coordinata del suo angolo inferiore sinistro è (1, 1), la sua larghezza è 1 e l’altezza è 2.

Il colore del bordo è specificato come blu, mentre il colore pieno è rosso.

Il metodo add_patch(P) dell’oggetto Axes aggiunge una Patch - p a axis.

Matplotlib_draw un rettangolo con colore pieno

Se fill è impostato su False, il rettangolo non verrà riempito anche se facecolor è specificato con un certo colore.

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig, ax = plt.subplots()

ax.plot([1, 4], [1, 4])

ax.add_patch(
    patches.Rectangle((1, 1), 1, 2, edgecolor="blue", facecolor="red", fill=False)
)

plt.show()

Matplotlib_draw un rettangolo senza colore pieno

Disegna un rettangolo sull’immagine in Matplotlib

Se abbiamo bisogno di disegnare un rettangolo su un’immagine in Matplotlib, è simile all’approccio precedente ma con il passaggio aggiuntivo per ottenere la maniglia Axes.

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

im = Image.open("butterfly.jpg")

plt.imshow(im)

ax = plt.gca()

rect = patches.Rectangle((80, 10), 70, 100, linewidth=2, edgecolor="cyan", fill=False)

ax.add_patch(rect)

plt.show()

plt.imshow(im) mostra l’immagine butterfly.jpg e l’handle di Axes può essere ottenuto dalla funzione plt.gca() la cui gca significa get current axes.

Matplotlib_disegna un rettangolo sull’immagine

Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook