文档转自:https://www.cnblogs.com/panxiaochun/p/5478555.html

cvBox2D和RotatedRect中返回的角度angle详解

本文为作者原创,未经允许不得转载;

原文由作者发表在博客园: http://www.cnblogs.com/panxiaochun/p/5478555.html

关于cvBox2D和RotatedRect中返回的角度angle的opencv官方说明文档里面没有给出太多到信息,其中文档是这样说的:

图1:opencv关于cvBox2D的说明文档截图

在水平轴和第一条边之间的角度。(好简洁,但是真的并没有太明确)

在网上也有关于cvBox2D和RotatedRect的角度angle的说明,但是查看了一下,不对,或者不完全对。其中有两篇:http://blog.csdn.net/mine1024/article/details/6044856和

http://blog.csdn.net/a553654745/article/details/45743063,其中说到了,x轴逆时针碰到的第一条边为width(实际中width可能比Height还大,实际使用中确实发现了width比height还大的情况),下面选取两篇文章中的图来说明一下:

图2:网友关于旋转角的说明图

这幅图是网上流传最多的,但是只有一篇原创,其它都是复制粘贴,有的甚至只是放了一幅图,这篇博文只告诉我们一个有用的东西,x轴逆时针碰到的第一条边为width,并与这条边形成的角度就是cvBox2D和RotatedRect的角度angle,但是这篇博文忽略了,一个事实就是opencv的坐标原点是左上角,所以这个坐标系是错的。下面的图就比较完整的说明了cvBox2D和RotatedRect的角度的来源:

图3:网友关于opencv旋转角的修正图

这个图是很好说明角度的选取的来源,但是我本人觉得有点错误所以,修正了一下:

图4:我个人关于cvBox2D和RotatedRect里面的角度angle的说明图

这是本人修改过的图,下面进入论证,这里用了一幅图,里面有两个旋转的矩形,其中由于旋转的角度不一样,所以opencv找出来的cvBox2D里面的width有可能会比height大

图5:测试图片里面的两个矩形图

其中第一个由于它是逆时针旋转的,所以,x轴会先碰到顶部的直线L1,第二个矩形是顺时针旋转的,所以x轴会先碰到左边的直线L2,很明显L2会比L1大,其中L1也会比它左边的直线小:

图6:第一个矩形的检测结果图

第一个矩形的角度只有-22度(再次证明不是书上说的弧度)其中width为130,比height小。

图7:第二个矩形的检测结果图

第二个矩形的角度为-77度,width为234,比height109大,其中还比第一个矩形的width大。论证成立。

其中角度的正负,在网上很多都说逆时针为正,顺时为负,这里逆时针为负,顺时针为正,主要原因,我个人觉得是和坐标系有关,因为网上说的角度的旋转的坐标系是以图2的坐标系作为参考,而opencv里面是以图3的作为参考,所以在x轴和y轴的象限里的角度为正的原则吧,opencv里逆时针为负。

图8:论证结果详解图

在opencv的源码的\modules\ imgproc\src下的rot calipers.cpp里可以找到minareaRect()函数的源码,该函数会返回RotatedRect,在c#版会返回CvBox2D,两个是一样的,在里面找到了angle不是弧度最佳证明:

box.angle = (float)(box.angle*180/CV_PI);

可以看出返回的RotatedRect的angle不是弧度单位,刚开始angle是弧度的,后来经过转换后再输出了,可能前几个版本里面的angle是弧度的后来改为度了。

https://www.vsien.cn/

Cvbox2D 角度 长宽正解相关推荐

  1. 高德地图, 根据长/宽/角度 绘制矩形 polygon

    created(){map.off('click', this.drawPolygon)},methods: {// 点击地图绘制矩形polygondrawPolygon(e) {// 地图点击坐标c ...

  2. 学计算机的能做近视手术吗,长时间盯着电脑,还能做近视手术吗?医生给你正解...

    原标题:长时间盯着电脑,还能做近视手术吗?医生给你正解 说实话,在这个数字化时代,有非常非常多的工作需要面对着电脑进行.即使不用对着电脑,手机也是离不开的工作沟通工具.好多想做近视手术的朋友回头一看自 ...

  3. python长表转换宽表_如何用Python来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. 数据长宽转换是很常用的需求,特别是当是从Excel中导入的汇总表 ...

  4. 射灯安装方法图解_家居射灯怎么选?第三代宜美SMD射灯给你正解

    前段时间,刚把自己的房子完成硬装,在灯具选择的过程中,家人的意见就不太统一.其父母觉得选灯只要够亮就行,而媳妇觉得选灯选贵的才行.到底谁的选灯方法好呢?其实家人们的建议并不是完全不对,灯够亮只是其中一 ...

  5. linux的dns怎么配置正向区域文件,Linux学习之路之DNS的配置文件和正解区域文件、反解区域文件...

    DNS正解区域文件 在DNS中,我们知道有域和区域的概念,域的英文名称是domain,它是一种逻辑概念:而区域英文全称zone,它是一种物理概念.且zone分为正解区域和反解区域 正解区域:提供正向解 ...

  6. 2021.8.11【提高B组模拟3】T1 积木(乱糊暴搜)(正解:状压dp)

    积木 题目大意 输入样例 3 8 7 6 3 9 4 1 10 5 输出样例 18 题目数据 解题思路 暴搜就没什么好讲的了 原本以为只有40,AC了就离谱 (数据真水) 正文:状压dp 前提:我这个 ...

  7. P1401 城市(30分,正解网络流)

    题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...

  8. java图像处理002---JAVA图片压缩_图片缩放_图片按照比例缩放_图片指定长宽缩放_Java使用google开源工具Thumbnailator实现图片压缩

    JAVA技术交流QQ群:170933152 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高 ...

  9. hwd分别是长宽高_长宽高是什么意思

    1. 注意:法国及加拿大中转货的长宽高如超过1.2米的价格另议. Note: transit cargo to France and Canada more than 1.2 metres the p ...

最新文章

  1. AI一分钟|阿里被曝拟参与旷视新一轮6亿美元融资;MIT设计自动力机器人,与人类卵细胞大小无异...
  2. (传送门) IDEA 控制台输出JVM的GC日志
  3. Cento7 PHP5.6 升级 PHP7.0.0
  4. react中使用构建缓存_使用React和Netlify从头开始构建电子商务网站
  5. JDK源码解析之 java.lang.Class
  6. vi编辑器的学习使用(二十)
  7. C语言控制台窗口界面编程:printf格式化显示-修改字符字体、颜色和背景
  8. innodb数据备份语句
  9. shell脚本特殊变量与变量子串相关知识
  10. 刷题upupup【Java中Queue、Stack、Heap用法总结】
  11. ZigBee与Android的智能家居控制系统设计
  12. 带你实战Android深色模式,深入原理剖析
  13. 多媒体计算机中的扬声器指的是音箱和,多媒体音箱还以为只是个喇叭,原来这么多名堂...
  14. 构造伽罗华域GF(2^m)的方法
  15. linux 应用层gpio中断_树莓派官方自带gpio中断驱动bcm2708_gpio.c原理分析 linux 中断架构 中断子系统...
  16. [进程通信] 进程间通信 之 管道
  17. 基于单片机火灾监测报警系统设计-毕设资料
  18. 网易云音乐等级快速升级 - 每天打卡听歌300首
  19. http协议及http协议和tcp协议的区别
  20. 96款2018最佳英文字体(附Mac字体安装方法)

热门文章

  1. Minio介绍及使用
  2. php语法错误害死人啊
  3. 自定义PMD检测的类型集合(详解)
  4. java pmd checkstyle_maven配置pom文件添加PMD检查,添加checkStyle检查,JDepend等检查功能...
  5. TYVJ p1006 isbn
  6. consul server启动
  7. 内资公司注销所需资料有哪些?
  8. 各大搜索引擎下拉获取
  9. 购买披萨系统-Java
  10. 【星际争霸2中的强化学习-1】使用 PySC2 构建虫族机器人