尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
旋转的角度正数负数
旋转的角度正数负数/*math coordinate, x right, y upper, clockwise angle 0, anti-clockwise angle 0(x-y)image coordinate, x right, y down, clockwise angle 0(x-y), anti-clockwise angle 0*//*math coordinate, x right, y upper, clockwise angle 0, anti-clockwise angle 0(x-y)ego coordinate, y right, z upper, clockwise angle 0, anti-clockwise angle 0(y-z)*/import **cv2** import **numpy** as **np** def **rotate_point**(): point **np**.**array**([200, 100]) image **np**.**zeros**((400, 400, 3), dtype **np**.uint8) **cv2**.**circle**( image, point, 6, (0, 0, 255), thickness 2 ) center **np**.**array**([200, 200]) **cv2**.**circle**( image, center, 1, (0, 0, 255), thickness 2 ) angle -90 * **np**.pi / 180 mat **np**.**array**( [[**np**.cos(angle), -**np**.sin(angle)], \ [**np**.sin(angle), **np**.cos(angle)]] ) pn point **-** center pn **np**.**reshape**(pn, (2, 1)) now **np**.matmul(mat, pn) now **np**.**asarray**(now, dtype**np**.int32) now now.**flatten**() **** center **cv2**.**circle**( image, now.**tolist**(), 9, (255, 0, 0), thickness 2 ) **cv2**.**imwrite**(/home/Desktop/stixel-world_summer_original/scripts/tmp.jpg, image) if __name__ __main__: **rotate_point**()OpenCV 二维点旋转问题解析你现在遇到现象数学上旋转矩阵角度为负代表顺时针旋转角度为正才是逆时针旋转这是很多人踩坑的关键点。1. 数学坐标系 vs OpenCV图像坐标系标准数学笛卡尔坐标系x向右y向上θ0\theta0θ0逆时针旋转θ0\theta0θ0顺时针旋转OpenCV图像坐标系x向右y向下y轴翻转同样一套旋转矩阵行为会反过来数学旋转矩阵 [ cosθ, -sinθ ] [ sinθ, cosθ ]你的代码angle -90 * np.pi / 180 # -90° mat np.array( [[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]] )在数学坐标系-90° 顺时针转90度在图像(y向下)坐标系-90°实际表现为逆时针90°90°会变成顺时针90°。重点图像y轴向下旋转方向和教科书数学定义是反过来的。2. 完整修正代码加上注释import cv2 import numpy as np def rotate_point(): # 原始点 (x,y) point np.array([200, 100]) image np.zeros((400, 400, 3), dtype np.uint8) # 画原始点红色 cv2.circle( image, point, 6, (0, 0, 255), thickness 2 ) # 旋转中心 center np.array([200, 200]) cv2.circle( image, center, 1, (0, 0, 255), thickness 2 ) # 关键 # 图像坐标系 y轴向下 # 想要【逆时针旋转90度】angle 给 90° 数学矩阵得到的是顺时针 # 想要图像画面上视觉逆时针90度要填 angle -90° angle_deg -90 angle angle_deg * np.pi / 180 # 标准2D旋转矩阵 rot_mat np.array([ [np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)] ]) # 步骤1平移把原点挪到旋转中心 p_rel point - center p_rel p_rel.reshape(2,1) # 步骤2矩阵旋转 p_rot_rel rot_mat p_rel # 步骤3平移回去 p_rot (p_rot_rel.flatten() center).astype(np.int32) # 画旋转后点蓝色圆圈 cv2.circle( image, p_rot.tolist(), 9, (255, 0, 0), thickness 2 ) cv2.imwrite(/home/Desktop/stixel-world_summer_original/scripts/tmp.jpg, image) if __name__ __main__: rotate_point()3. 如果你想统一逻辑完全符合数学笛卡尔坐标系y向上如果不想被图像y向下搞混淆可以手动对y坐标取负# point (x,y_img) → math (x, -y_img) # 旋转后再还原 y4. OpenCV自带函数参考cv2.getRotationMatrix2Dcv2的旋转矩阵内部已经适配图像y向下行为和手写矩阵一致。# 注意cv2.getRotationMatrix2D角度定义正数图像上逆时针 M cv2.getRotationMatrix2D(center(200,200), angle-90, scale1.0) dst cv2.warpAffine(image, M, (400,400))⚠️注意cv2.getRotationMatrix2D的角度定义正数图像视觉逆时针旋转和手写纯数学矩阵符号是相反的。对照表图像坐标系 y向下想要画面视觉效果手写数学矩阵 anglecv2.getRotationMatrix2D angle逆时针90°-90° * pi/18090顺时针90°90° * pi/180-90你的现象解释你代码里面写angle-90手写数学矩阵输出画面上就是视觉逆时针旋转90度。不是bug根源就是图像y轴朝下旋转方向反转。如果你需要我可以给你画一张坐标变换示意图代码直观看到y轴翻转带来方向反转。
RELATED

相关推荐

SOME/IP 协议实战(二):SOA 仿真环境搭建、5 个工程坑与未来选型

SOME/IP 协议实战(二):SOA 仿真环境搭建、5 个工程坑与未来选型

上一篇文章发出后有些朋友问我 “我手头没有真车和真实 ECU,怎么在办公室搭一个 SOME/IP 仿真环境?”“SOME/IP 我学完了,但真到项目里就各种坑——服务冲突、SD 不收敛、TP 重组失败——怎么避?” 这一篇就是为这两个问题写的。我…

📅 2026/10/19 6:19:08
共享库文件查看内部

共享库文件查看内部

CMAKE .so 一、查看 CMake 最终生效的编译选项(两种方案) 方案1:打印目标所有 compile options(推荐,精准看 target_compile_options) 在 CMake 脚本末尾添加这段代码,替换 stixelworld_shared …

📅 2026/9/12 6:34:04
龙蜥社区战略升级:从开源操作系统到AI原生生态构建

龙蜥社区战略升级:从开源操作系统到AI原生生态构建

1. 从“捐赠”到“升级”:一次社区战略的深度解构 最近,龙蜥社区宣布将自身捐赠给开放原子开源基金会,并全面升级为“AI 原生操作系统社区”。这个消息在技术圈里激起了不小的水花,很多人第一反应可能是:“哦&#xff…

📅 2026/9/8 22:42:38
MORE NEWS

更多资讯

📰

LuatOS-Air迁移LuatOS:API、调度、硬件失效模式全解析

从LuatOS-Air把老脚本搬到LuatOS平台,十次有九次不是“跑起来有点小问题”,而是从第一行就开始报错:require失败、模块找不到、函数直接not found。我手头一个老项目就是这样,脚本复制过去,分分钟被打回原形。很多人以…

📰

FPGA自适应滤波实战:从LMS到FxLMS主动噪声控制

最开始接到这个课题,是一位前辈丢给我一个主动噪声控制的验证需求:风扇宽频噪声,要求在出口处压掉20dB以上。我一开始想得挺简单,自适应滤波嘛,LMS跑起来就完事了。但真正在FPGA上把FIR、IIR、LMS、NLMS、RLS、FxLMS这…

📰

FreeRTOS xTaskCreateStatic深度解析:静态任务创建避坑指南

嵌入式圈子里谈论任务创建,很多人第一反应就是xTaskCreate,而对xTaskCreateStatic的印象往往停留在“另一个静态版本”这种模糊认知上。我刚接手一个设备项目时也这样,直到一次长稳测试让我彻底改了习惯:某个临时任务用动态方式创…

📰

diagram-design实战:从草图到系统架构图的完整方法论

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 diagram-design 这个词,很多人会以为它只是一个画图工具的别名。但真正在项目里摸爬滚打过几年的人会明白,它指的是一整套关于“如何把复杂逻辑变成一张别人能看懂的图…

📰

基于Spark+HBase+Vue的实时新闻分析系统实战

简介:本资源是一套高完成度的毕业设计级项目,面向大数据开发初学者与高校计算机专业学生,聚焦新闻网数据的实时采集、分析与可视化全流程实践。项目基于Spark 2.x构建,融合Flume日志采集、Kafka消息队列、HBase存储及前端Web展示&…

📰

MATLAB随机森林分类器实战:从数据预处理到调参避坑

简介:基于随机森林的分类算法MATLAB简单实现,面向机器学习入门者与MATLAB开发者,定位于解决分类建模实践入门的一站式参考。资源包共8个文件,包含3个M脚本(分别承担随机森林训练与预测、ID3基础决策树算法及统计评估&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬