我想绘制一个旋转的矩形,我有左上角和右下角,框的宽度和高度。以及角度。但我似乎无法弄清楚如何在 Python 中使用OpenCV绘制旋转的矩形。请注意,我不想旋转图像。
谢谢
答案 0 :(得分:1)
在OpenCV中绘制矩形的方法有很多种。
来自OpenCV文件:Drawing Functions
<强>矩形强>
绘制一个简单,厚实或填充右上方的矩形。
因此,当你想要旋转它时,这个功能没有帮助。
矩形只是一个特殊的4边多边形。因此,只需使用该函数来绘制多边形。
<强>折线强>
绘制几条多边形曲线。
Python:
cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) → img
并插入旋转矩形的4个顶点
或使用
分别绘制4面订单强>
绘制连接两个点的线段。
或
<强> drawContours 强>
绘制轮廓轮廓或填充轮廓。
可以使用简单的数学方法获得分数,例如使用OpenCV的RotatedRect https://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#rotatedrect
答案 1 :(得分:0)
class Point:
def __init__(self, x, y):
self.x = int(x)
self.y = int(y)
class Rectangle:
def __init__(self, x, y, w, h, angle):
# Center Point
self.x = x
self.y = y
# Height and Width
self.w = w
self.h = h
self.angle = angle
def rotate_rectangle(self, theta):
pt0, pt1, pt2, pt3 = self.get_vertices_points()
# Point 0
rotated_x = math.cos(theta) * (pt0.x - self.x) - math.sin(theta) * (pt0.y - self.y) + self.x
rotated_y = math.sin(theta) * (pt0.x - self.x) + math.cos(theta) * (pt0.y - self.y) + self.y
point_0 = Point(rotated_x, rotated_y)
# Point 1
rotated_x = math.cos(theta) * (pt1.x - self.x) - math.sin(theta) * (pt1.y - self.y) + self.x
rotated_y = math.sin(theta) * (pt1.x - self.x) + math.cos(theta) * (pt1.y - self.y) + self.y
point_1 = Point(rotated_x, rotated_y)
# Point 2
rotated_x = math.cos(theta) * (pt2.x - self.x) - math.sin(theta) * (pt2.y - self.y) + self.x
rotated_y = math.sin(theta) * (pt2.x - self.x) + math.cos(theta) * (pt2.y - self.y) + self.y
point_2 = Point(rotated_x, rotated_y)
# Point 3
rotated_x = math.cos(theta) * (pt3.x - self.x) - math.sin(theta) * (pt3.y - self.y) + self.x
rotated_y = math.sin(theta) * (pt3.x - self.x) + math.cos(theta) * (pt3.y - self.y) + self.y
point_3 = Point(rotated_x, rotated_y)
return point_0, point_1, point_2, point_3
返回由theta翻译的四个新点
https://github.com/rij12/YOPO/blob/yopo/darkflow/net/yopo/calulating_IOU.py