Как нарисовать заполненный повернутый прямоугольник с указанием координат центра, ширины, высоты и угла? - PullRequest
0 голосов
/ 07 мая 2018

Давайте рассмотрим, что у нас есть повернутый прямоугольник, определяемый как (centerx, centery, width, height, angle). Вопрос в том, как нарисовать эту повернутую ограничивающую рамку с конкретным заполненным значением, например, 5 в изображении только с простой командой.

Что мне нужно, это что-то вроде команды ниже:

draw.rectangle(centerx, centery, width, height, angle, value, 'filled')

В библиотеках OpenCV, PIL, shapely и Matplotlib нет простой команды для этого случая. Я искал в сети и не мог найти решение для этого.

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

1 Ответ

0 голосов
/ 07 мая 2018

Попробовав больше, я нашел следующее решение, которое работает:

import numpy as np
from PIL import Image, ImageDraw
import math
import numpy.matlib as npm

def convert5Pointto8Point(cx_, cy_, w_, h_, a_):

    theta = math.radians(a_)
    bbox = npm.repmat([[cx_], [cy_]], 1, 5) + \
       np.matmul([[math.cos(theta), math.sin(theta)],
                  [-math.sin(theta), math.cos(theta)]],
                 [[-w_ / 2, w_/ 2, w_ / 2, -w_ / 2, w_ / 2 + 8],
                  [-h_ / 2, -h_ / 2, h_ / 2, h_ / 2, 0]])
    # add first point
    x1, y1 = bbox[0][0], bbox[1][0]
    # add second point
    x2, y2 = bbox[0][1], bbox[1][1]
    # add third point
    #x3, y3 = bbox[0][4], bbox[1][4]   # نوک پیکان برای به نمایشگذاری
    # add forth point
    x3, y3 = bbox[0][2], bbox[1][2]
    # add fifth point
    x4, y4 = bbox[0][3], bbox[1][3]

    return [x1, y1, x2, y2, x3, y3, x4, y4]


img = Image.new('L', (width, height), 0)
polygon = convert5Pointto8Point(50, 100, 30, 10, -50)
ImageDraw.Draw(img).polygon(polygon, outline=value, fill=value)         
plt.imshow(img)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...