如何绘制一个带有中心坐标,宽度,高度和角度的填充旋转矩形?

时间:2018-05-06 21:17:39

标签: python image

让我们考虑一下由(centerx,centery,width,height,angle)指定的旋转矩形。 问题是如何使用特定的填充值绘制此旋转的边界框,例如只有简单命令的图像中有5个。

我需要的是类似下面的命令:

send_event('inst_alltime_total_runs', { text: "All Time Total Executions: " + $allTime[:total_executions] })

OpenCV,PIL,shapely和Matplotlib库对于这种情况没有简单的命令。我在网上搜索过,找不到解决办法。

一个解决方案可能是this,但它不考虑填充矩形。

1 个答案:

答案 0 :(得分:0)

在尝试了更多后,我提出了以下解决方案:

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()