Как изобразить ограничивающий прямоугольник с учетом 4 вершин прямоугольника в python? - PullRequest
0 голосов
/ 08 января 2020

Я работаю над приложением OCR, и у аннотаций, приведенных для изображения, есть 4 вершины рисунка, подобного этому,

x1_1, y1_1,x2_1,y2_1,x3_1,y3_1,x4_1,y4_1, text_line

Как я могу построить это?

Я пытался использовать plt.rectangle, но это только xmin, ymin, xmax, ymax, и здесь у меня есть 4 вершины?

1 Ответ

1 голос
/ 08 января 2020

, если вы настаиваете на том, чтобы не найти минимальное / максимальное значение, которое вы можете сделать:

import numpy as np
import matplotlib.pyplot as plt

d=[1,1,1,4,3,4,3,1]
Xs = d[::2]
Ys = d[1::2]
for i in range(4):
    if i < 3:
        plt.plot([Xs[i],Xs[i+1]],[Ys[i],Ys[i+1]],'k-',lw=2)
    elif i == 3:
        plt.plot([Xs[i],Xs[0]],[Ys[i],Ys[0]],'k-',lw=2)

plt.show()

, что дает:

enter image description here

Правильный подход - сначала найти самую левую точку, а затем найти ширину и высоту и передать все 3 в matplotlib.patches.Rectangle. В случае, если вы получаете правильно отсортированные баллы, вам нужно просто взять (x_1,y_1), а затем width=x_4-x_1, height=y_2-y_1

Простой пример:

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

plt.axes()
rectangle = pac.Rectangle((1,1), 50, 20, fc='blue',ec="red")
plt.gca().add_patch(rectangle)
plt.axis('scaled')
plt.show()

, который генерирует:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...