Как нарисовать прямоугольник на изображении в Matplotlib

  1. Нарисуйте прямоугольник в Matplotlib
  2. Нарисуйте прямоугольник на изображении в Matplotlib

Когда нам нужно нарисовать прямоугольник на изображении или простой фигуре в Matplotlib, к осям следует добавить патч прямоугольник из matplotlib.patches методом add_patch.

A matpotlib patch - это 2-D художник, который имеет цвет лица и края. Matpotlib имеет патч типа,

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

Rectangle патч рисует прямоугольник с заданной координатой нижнего левого угла и заданной шириной и высотой.

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

xy - это кортеж длиной 2, задающий координаты нижнего левого угла рисуемого прямоугольника,

width - это ширина прямоугольника,

height - это высота прямоугольника,

angle - это угол против часовой стрелки в градусах.

fill указывает, заполнен ли прямоугольник facecolor.

Некоторые действительные kwargs,

  • edgecolor: цвет краев прямоугольника.
  • facecolor: цвет прямоугольника с заливкой.

Нарисуйте прямоугольник в 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()

Прямоугольный патч создается конструктором,

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

Координата левого нижнего угла - (1, 1), ширина - 1 и высота - 2.

Цвет края указан как синий, цвет заливки - красный.

Метод add_patch(P) объекта Axes добавляет Patch - p к оси.

Matplotlib_drawect прямоугольник с цветом заливки

Если fill задано как False, то прямоугольник не будет заполнен, даже если задан какой-то цвет facecolor.

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_drawect прямоугольник без цвета заливки

Нарисуйте прямоугольник на изображении в Matplotlib

Если нам нужно нарисовать прямоугольник на изображении в Matplotlib, то это похоже на описанный выше подход, но с дополнительным шагом, чтобы получить рукоятку 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) отображает изображение butterfly.jpg, а хэндл Axes может быть получен функцией plt.gca() чей gca означает get current axes.

Matplotlib_draww прямоугольник на изображении

comments powered by Disqus