让我们考虑一下由(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,但它不考虑填充矩形。
答案 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()