Cvbox2D 角度 长宽正解

2024-06-16 23:58
文章标签 角度 长宽 cvbox2d

本文主要是介绍Cvbox2D 角度 长宽正解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文档转自: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 角度 长宽正解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067916

相关文章

如何从SEO角度解读“地摊经济”?

如果你是一名SEO人员,经常我们需要做的第一件事就是做关键词挖掘与分析,特别是当我们试图去做热点新闻事件排名的时候。 我们只有深刻的理解目标关键词背后真正潜在的搜索需求,我们才可以根据关键词的属性,撰写高质量的相关性文章,比如:地摊经济,依然成为各地市广为热议的话题。 那么,如何从SEO角度解读“地摊经济”? 根据以往关键词优化的经验,曾庆平将通过如下内容阐述: 1、关键词拓展 通常

物联网之ESP32控制舵机、通过网页设置舵机角度、Web服务、舵机原理、接线、Arduino、WiFi、Http

MENU 前言原理硬件电路设计软件程序设计LEDC输出PWM信号使用第三方库控制舵机网页控制舵机 前言 舵机在电子产品中非常常见,比如四足机器人、固定翼航模等都有应用,因此学习舵机对电子制作非常有意义。本文章使用Arguino的PWM对SG90舵机旋转角度控制。 原理 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机只

opencv实战项目二十:检测箱盖的旋转角度以及位置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、算法流程:二、算法实现:2.1 二值化箱盖并获取最大轮廓:2.2 凸包与多边形近似提取矩形2.3 最小外接矩形获取角度与位置 三,整体代码实现:四,实现效果: 前言 在当今的工业自动化领域,精密制造和智能控制技术的发展正推动着生产流程的持续优化。随着机器视觉技术的不断成熟,其在工业应用

判断两个yaw角度之差是否超过了90度

一. 判断两个yaw角度之差是否超过了90度 要判断两个 yaw 角度之差是否超过 90 度,你可以通过计算这两个角度的差值,并将其归一化为 [-180, 180] 的范围内。接着,只需判断该差值的绝对值是否大于 90 度。 实现步骤: 计算角度差:两个角度的差值可以通过直接相减得到,但需要将结果限制在 [-180, 180] 范围内,因为角度是周期性的。归一化到 [-180, 180] 范

从spark源码的角度思考scala中的模式匹配

1.scala中模式匹配 2.spark源码中的模式匹配思考 spark中master会收到worker发过来的akka的消息, 此消息是case class即(Master.class中): case class RegisterWorker(id:String,host:String,port:Int,cores:Int,memory:Int,webUiPort:int

从源码角度分析 Kotlin by lazy 的实现

by lazy 的作用 延迟属性(lazy properties) 是 Kotlin 标准库中的标准委托之一,可以通过 by lazy 来实现。 其中,lazy() 是一个函数,可以接受一个 Lambda 表达式作为参数,第一次调用时会执行 Lambda 表达式,以后调用该属性会返回之前的结果。 例如下面的代码: val str: String by lazy{println("aaron

GNN-频域-2014:Spectral Networks and Locally Connected Networks on Graphs(频谱图卷积神经网络)【第一篇从频域角度分析】

《原始论文:Spectral Networks and Locally Connected Networks on Graphs》 空域卷积非常直观地借鉴了图像里的卷积操作,但缺乏一定的理论基础。 而频域卷积则不同,相比于空域卷积而言,它主要利用的是**图傅里叶变换(Graph Fourier Transform)**实现卷积。 简单来讲,它利用图的**拉普拉斯矩阵(Laplacian ma

激光雷达定位算法在FPGA中的实现——section2 全局坐标和角度计算

1、全局坐标矩阵X         在section1中已经就激光雷达的全局坐标公式进行了推导,得到           ​         其中,                                     这里需要计算出矩阵X里面的x,y,cosα,sinα。         关于这个计算公式的求解,方阵的逆矩阵计算成为关键步骤。 2、方阵的逆变换 2.1 4*4

怎样提高GRE写作的角度和视野?

关于语言,我觉得首先最基本的要求就是写对句子,一句话要表达正确表达清晰,阅卷人才有兴趣看下去。比如时态,比如短语使用,比如动词和介词的搭配,比如单词拼写,比如单词的准确使用而不是牵强附会(不能为了使用一个高级单词而不择手段。其次就是我们的词汇使用的变换,同一个单词,可能所有人都会用,但用得恰到好处就很难了,同一个意思,可能大多数人都会向某个单词,这个时候我们可不可以换个别的单词(也不能是太偏僻

从行或列的角度思考矩阵-向量乘法(matrix-vector multiplication)

从行或列的角度思考矩阵-向量乘法可以帮助理解这个运算的几何意义以及如何在计算中操作。 1. 从行的角度思考 假设我们有一个 m × n m \times n m×n的矩阵 A A A 和一个 n × 1 n \times 1 n×1的列向量 x \mathbf{x} x。矩阵-向量乘法 A x A\mathbf{x} Ax 的结果是一个 m × 1 m \times 1 m×1的列