You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:39:05