版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lircsszz/article/details/80118051

算法一:直接法

  1. bool isRotationMatrix(cv::Mat &R)
  2. {
  3. cv::Mat R_t;
  4. cv::transpose(R,R_t);
  5. cv::Mat shouldBeIdentity=R_t*R;
  6. cv::Mat I = cv::Mat::eye(3,3,shouldBeIdentity.type());
  7. return norm(I,shouldBeIdentity)< 1e-6;
  8. }
  9. void getEulerAngles(cv::Mat matrix)
  10. {
  11. assert(isRotationMatrix(matrix));
  12. float sy=sqrt(matrix.at<double>(0,0)*matrix.at<double>(0,0)+matrix.at<double>(1,0)*matrix.at<double>(1,0));
  13. bool singular = sy<1e-6;
  14. if(!singular)
  15. {
  16. theta_x=atan2(matrix.at<double>(2,1),matrix.at<double>(2,2));
  17. //theta_x= theta_x*180.0/3.1416 ;
  18. theta_y=atan2(-matrix.at<double>(2,0), sy);
  19. //theta_y= theta_y*180.0/3.1416 ;
  20. theta_z=atan2(matrix.at<double>(1,0), matrix.at<double>(0,0));
  21. //theta_z= theta_z*180.0/3.1416 ;
  22. }
  23. else
  24. {
  25. theta_x=atan2(-matrix.at<double>(1,2), matrix.at<double>(1,1));
  26. //theta_x= theta_x*180.0/3.1416 ;
  27. theta_y=atan2(-matrix.at<double>(2,0), sy);
  28. //theta_y= theta_y*180.0/3.1416 ;
  29. theta_z=0;
  30. //theta_z= theta_z*180.0/3.1416 ;
  31. }
  32. Debug("theta_x");
  33. Debug(theta_x);
  34. Debug("theta_y");
  35. Debug(theta_y);
  36. Debug("theta_z");
  37. Debug(theta_z);
  38. }

NOTE:需要判断奇异性(singularity)!

算法二:拆分法

  1. void getEulerAngles(cv::Mat &R,cv::Mat &t,cv::Mat &euler_angles)
  2. {
  3. cv::Mat camMatrix,rotMatrix,transVect,theta_x,theta_y,theta_z;
  4. cv::Mat rotation_vec;
  5. cv::Mat projMatrix = cv::Mat(3,4,CV_64FC1);
  6. //cv::Mat euler_angles = cv::Mat(3,1,CV_64FC1);
  7. cv::Mat out_intrinsics = cv::Mat(3,3,CV_64FC1);
  8. cv::Mat out_rotation = cv::Mat(3,3,CV_64FC1);
  9. cv::Mat out_translation = cv::Mat(4,1,CV_64FC1);
  10. cv::hconcat(R,t,projMatrix);//将R、t拼接维投影矩阵
  11. cv::decomposeProjectionMatrix(projMatrix,out_intrinsics,out_rotation,out_translation,
  12. cv::noArray(),cv::noArray(),cv::noArray(),euler_angles);
  13. //将投影矩阵分解为旋转矩阵和相机(内参)矩阵
  14. Debug("Euler Angle");
  15. Debug(euler_angles);
  16. }

无需判断奇异性,直接调用库函数,相对简单

转载自:https://blog.csdn.net/lircsszz/article/details/80118051


http://www.taodudu.cc/news/show-1217173.html

相关文章:

  • Matlab--绘图总结
  • 谈均值、方差、标准差、协方差的概念及意义
  • 最小二乘法(1)
  • 张正友标定Opencv实现、标定流程以及图像坐标转为世界坐标
  • 畸变校正详解
  • 双线性内插插值原理
  • TX2刷机flashOS finished后,卡在determining IP address解决方案
  • Jetson-TX2安装opencv教程
  • Jetson TX2板载相机opencv调用打开
  • 单独像对相对定向的部分基本概念
  • 单独像对相对定向元素解析
  • 模型点计算
  • 连续法相对定向元素
  • 绝对圆锥曲线
  • aarch64(ARMv8)交叉编译环境下载
  • 施密特正交化的几何解释
  • 信赖域算法
  • 最优化系列
  • 向量和矩阵范数总结
  • 矩阵的逆、伪逆、左右逆,最小二乘,投影矩阵
  • 矩阵的四个基本子空间
  • 对角化和A 的幂
  • 选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵
  • MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
  • PCL1.8.0+Windows+VS2013配置
  • 正规方程的推导过程
  • (多变量线性回归)正规方程求解特征参数的推导过程
  • 你应该要掌握的7种回归分析方法
  • 目标识别、目标跟踪算法总结
  • 牛顿法与拟牛顿法学习笔记

由旋转矩阵计算欧拉角的方法相关推荐

  1. 从旋转矩阵计算欧拉角

    从旋转矩阵计算欧拉角 从旋转矩阵中找到所有可能的欧拉角的简单方法,在计算机图形学.视觉学.机器人学和运动学中,欧拉角的确定有时是必要的一步.然而,解决方案可能是明显的,也可能不是. 旋转矩阵 我们从三 ...

  2. 学习笔记17 --使用matlab自带函数,将旋转矩阵计算成欧拉角

    个人环境是使用matlab2017b 该公式计算欧拉角有个要求,必须是3x3的旋转矩阵(尝试过4x4的计算不了).matlab自带的由旋转矩阵计算欧拉角公式是,rotm2eul(),其可以指定旋转顺序 ...

  3. 三维坐标系带偏航角俯仰角_浅谈三维旋转的三种方法及差异

    概述 在3D图形学中,几何变换大致分为三种:平移变换(Translation).缩放变换(Scaling).旋转变换(Rotation),而其中又以旋转变换(Rotation)最为复杂,通常旋转变换( ...

  4. 从某一点出发沿任意一方向旋转矩阵计算思考与实现

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 上期讲到 绕任一向量旋转矩阵计算思考与实现 点击前往 点击前往 问题提出 之前讲到绕任一向量旋转矩阵实现,原来的向量都是从原点出 ...

  5. 图形学笔记(四)变换——三维变换(三维旋转与欧拉角)、MVP变换、视图变换、投影变换(正交投影与透视投影)

    图形学笔记(三)变换--缩放.镜像.切变 图形学笔记(五)光栅化--屏幕.像素.屏幕空间.视口变换.基础图元与三角形.采样.包围盒.锯齿或走样 文章目录 1 三维空间中的变换 1.1 三维空间中的齐次 ...

  6. 如何让python图案旋转_python实现旋转和水平翻转的方法

    如下所示: # coding=utf-8 import glob import os from PIL import Image def rotate_270(imgae): "" ...

  7. ios键盘横屏_iOS横竖屏旋转及其基本适配方法 转

    目录 一.最让人纠结的三种枚举 二.两种屏幕旋转的触发方式 三.屏幕旋转控制的优先级 四.开启屏幕旋转的全局权限 五.开启屏幕旋转的局部权限(视图控制器) 六.实现需求:项目主要界面竖屏,部分界面横屏 ...

  8. 2022年最简单旋转PDF页面的方法推荐

    有时候,我们打开一个PDF文件就会发现,有些PDF页面会被颠倒或错误旋转,会影响我们阅读,那遇到这种情况,要如何将其旋转到正确的位置?今天我们就借助金闪PDF编辑器给大家推荐几个简单的旋转PDF页面的 ...

  9. PDF文件旋转最好用的方法

    PDF文件旋转最好用的方法,很多情况下收到一份PDF文件,打开阅读或编辑时发现页面是反方向,需要针对个别的页面进行旋转,或者是整篇文章进行旋转,以使整个排版看起来更合理.方便.美观.小编给大家整理了一 ...

最新文章

  1. python实现文件搜索_python实现搜索指定目录下文件及文件内搜索指定关键词的方法...
  2. gentoo下gnome的抓图功能
  3. python os.chdir函数
  4. 文巾解题 136. 只出现一次的数字
  5. go mysql教学_Go语言之对Mysql简单操作
  6. JVM调优:常见垃圾回收算法
  7. 浙南联合训练赛20180414
  8. go 公众号 关注 监听_golang微信公众平台之消息接入
  9. php设置文字大小、,html字体大小怎么设置
  10. msf生成php木马,11.7 Weevely3生成网页木马、Backcookie后门生成工具、使用msf生成木马、一句话变形技巧和使用...
  11. 原创|批处理|Monkey自动测试工具批处理版
  12. WinRAR是什么?------压缩工具
  13. mysql的外文图书_外文数据库
  14. 向量的加减法与内外积
  15. 创新彰显实力,方正璞华又获一项国家发明专利
  16. 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解
  17. 康奈尔rtems笔记(1)
  18. win7虚拟机时间不能修改怎么办
  19. 「斐讯」N1-YYF 固件
  20. 进程同步/异步的区别

热门文章

  1. Royal TS 一款非常好用的SSH客户端,XShell的完美代替品
  2. Hystrix面试 - 基于 request cache 请求缓存技术优化批量商品数据查询接口
  3. ZooKeeper管理员指南
  4. 银行业务队列简单模拟(队列queue)
  5. C语言 结构体练习之投票
  6. linux查看openjdk的安装的路径
  7. [极客大挑战 2019]PHP
  8. Redux中的功能式React式编程简介
  9. 团队建设及管理上的举措_为什么在副项目上工作是您作为开发人员的最佳举措...
  10. matlab中函数或变量无法识别怎么办_用MATLAB巧解微分方程实例分析