如何旋转矩形 cv2 python
how to rotate Rectangle shape cv2 python
我有一个简单的矩形我只想以任何输入角度旋转这个矩形
我的代码是:
import cv2
import numpy as np
imgc = np.zeros((500, 500, 3), np.uint8)
p0 = (100, 100)
p1 = (100 , 150)
p2 = (150, 150)
p3 = (150, 100)
pp = np.array([p0, p1, p2, p3])
cv2.drawContours(imgc, [pp], 0, (155, 155, 155), -1, cv2.LINE_AA)
cv2.imshow("image",imgc)
cv2.waitKey()
你需要的是Rotation Matrices。但是你需要记住这个围绕原点旋转一个给定角度(以弧度为单位)的点。
您需要将您的点移动到原点,旋转它们并向后移动相同的量。
当您将所有点生成步骤分解为一个等式时,这里看起来是线:
def rotate(points, angle):
ANGLE = np.deg2rad(angle)
c_x, c_y = np.mean(points, axis=0)
return np.array(
[
[
c_x + np.cos(ANGLE) * (px - c_x) - np.sin(ANGLE) * (py - c_x),
c_y + np.sin(ANGLE) * (px - c_y) + np.cos(ANGLE) * (py - c_y)
]
for px, py in points
]
).astype(int)
请注意:drawContours
期望点为整数而不是浮点数,因此您需要将数组转换为 int
。
这里蓝色矩形是原始矩形,洋红色矩形是旋转 45 度后的矩形:
我有一个简单的矩形我只想以任何输入角度旋转这个矩形 我的代码是:
import cv2
import numpy as np
imgc = np.zeros((500, 500, 3), np.uint8)
p0 = (100, 100)
p1 = (100 , 150)
p2 = (150, 150)
p3 = (150, 100)
pp = np.array([p0, p1, p2, p3])
cv2.drawContours(imgc, [pp], 0, (155, 155, 155), -1, cv2.LINE_AA)
cv2.imshow("image",imgc)
cv2.waitKey()
你需要的是Rotation Matrices。但是你需要记住这个围绕原点旋转一个给定角度(以弧度为单位)的点。
您需要将您的点移动到原点,旋转它们并向后移动相同的量。
当您将所有点生成步骤分解为一个等式时,这里看起来是线:
def rotate(points, angle):
ANGLE = np.deg2rad(angle)
c_x, c_y = np.mean(points, axis=0)
return np.array(
[
[
c_x + np.cos(ANGLE) * (px - c_x) - np.sin(ANGLE) * (py - c_x),
c_y + np.sin(ANGLE) * (px - c_y) + np.cos(ANGLE) * (py - c_y)
]
for px, py in points
]
).astype(int)
请注意:drawContours
期望点为整数而不是浮点数,因此您需要将数组转换为 int
。
这里蓝色矩形是原始矩形,洋红色矩形是旋转 45 度后的矩形: