Como desenhar um retângulo na imagem em Matplotlib

Jinku Hu 15 fevereiro 2024
  1. Rectângulo de desenho em Matplotlib
  2. Rectângulo de desenho na imagem em Matplotlib
Como desenhar um retângulo na imagem em Matplotlib

Quando precisamos desenhar um retângulo sobre uma imagem ou figura simples em Matplotlib, o retângulo de matplotlib.patches deve ser adicionado aos eixos pelo método add_patch.

Um Matpotlib patch é um artista 2-D que tem uma cor de face e borda. Matplotlib tem patches como,

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

O patch Rectangle desenha um retângulo com uma coordenada especificada de canto inferior esquerdo e largura e altura especificadas.

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

xy é um tuple de comprimento-2 para especificar as coordenadas do canto inferior esquerdo do retângulo a ser desenhado,

width é a largura do retângulo,

height é a altura do retângulo,

angle é o ângulo em graus no sentido anti-horário.

O fill especifica se o retângulo é preenchido com o facecolor.

Alguns kwargs válidos são,

  • edgecolor: a cor das bordas do retângulo
  • facecolor: a cor preenchida do retângulo

Rectângulo de desenho em 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()

O remendo retangular é criado pelo construtor,

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

Sua coordenada inferior esquerda é (1, 1), sua largura é 1 e sua altura é 2.

A cor da borda é especificada como blue, enquanto que a cor preenchida é red.

O método add_patch(P)do objeto Axes acrescenta um Patch - p ao axis.

Matplotlib_draw um retângulo com a cor preenchida

Se o fill estiver definido para ser False, o retângulo não será preenchido mesmo que facecolor seja especificada com alguma cor.

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 um retângulo sem cor de preenchimento

Rectângulo de desenho na imagem em Matplotlib

Se precisarmos desenhar um retângulo sobre uma imagem em Matplotlib, é semelhante à abordagem acima, mas com a etapa extra para obter o cabo 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()

O plt.imshow(im) exibe a imagem butterfly.jpg e o cabo de Axes poderia ser obtido pela função plt.gca()cujo gca significa get current axes.

Matplotlib_draw um retângulo sobre a imagem

Autor: 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