Python使用cv2库实现矩形任意角度旋转的操作方法
OpenCV 矩形任意角度旋转实现方案
这里提供直接旋转矩形顶点坐标的实现方案,无需修改画布尺寸,灵活支持任意角度输入,完整可运行代码如下:
import cv2 import numpy as np import math # 初始化画布 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]) # 输入旋转角度(单位:度,逆时针为正方向,顺时针旋转输入负值即可) rotate_angle = float(input("请输入旋转角度:")) theta = math.radians(rotate_angle) # 角度转弧度 # 计算矩形旋转中心(默认取几何中心,可根据需求自定义) cx = (p0[0] + p2[0]) / 2 cy = (p0[1] + p2[1]) / 2 # 计算每个顶点旋转后的新坐标 new_pp = [] for (x, y) in pp: x_new = (x - cx) * math.cos(theta) - (y - cy) * math.sin(theta) + cx y_new = (x - cx) * math.sin(theta) + (y - cy) * math.cos(theta) + cy new_pp.append([int(round(x_new)), int(round(y_new))]) new_pp = np.array(new_pp) # 绘制原始矩形(灰色)和旋转后矩形(蓝色)方便对比,不需要原始矩形可删除对应行 cv2.drawContours(imgc, [pp], 0, (155, 155, 155), -1, cv2.LINE_AA) cv2.drawContours(imgc, [new_pp], 0, (255, 0, 0), -1, cv2.LINE_AA) cv2.imshow("旋转效果", imgc) cv2.waitKey(0) cv2.destroyAllWindows()
补充说明
- 核心逻辑基于2D平面坐标旋转公式,所有计算直接作用于矩形顶点,性能损耗极低
- 如果需要实现全画布旋转,可以用
cv2.getRotationMatrix2D()和cv2.warpAffine()组合实现,该方案适合全图内容统一旋转的场景 - 支持任意正负浮点角度输入,默认取矩形几何中心作为旋转原点,可根据需求修改
cx、cy参数自定义旋转中心
内容的提问来源于stack exchange,提问作者iyad
相关产品推荐
相关产品推荐

