RotatedRect中返回的角度angle详解

关于RotatedRect中返回的角度angle的opencv官方说明文档里面没有给出太多到信息,但在python opencv关于该函数有详细的介绍:

在了解 RotatedRect中返回的角度angle之前,必须弄清楚的一件事是opencv图像坐标系的选取原则,在opencv中,图像的的坐标原点是左上角,以水平向右为X轴,以竖直向下为Y轴。而以往网上的资料都是建立在坐标原点是左下角,以水平向右为X轴,以竖直向上为Y轴,这对于大部分了解opencv的学习者来说,难以被接受,如图所示。                                                                                                                                   

 在了解OpenCV坐标系的选取规则之后,接下来我们就来讲讲有关RotatedRect中返回的角度angle的问题,具体的操作流程可参考https://www.cnblogs.com/panxiaochun/p/5478555.html,该文章详细的介绍了关于该角度angle的问题,但美中不足的是并没有得到一个比较令人通俗易懂的结论,在这里经过多次的论证,得出以下结论:

一、组成angel的最小外接矩形的边的选取问题。

       angel的形成与选取的最小外接矩形的边有关,在这里我们只给出最终结论,有兴趣的同志,可以自己去验证一下,距离坐标原点最近的最小外接矩形的边,作为angel的一条边或者其延长线,而另一条边为X轴,两条线最终形成一个夹角。如图所示

 

 

二、angel角度正负的问题。

      关于角度正负的问题,在OpenCV4.0官方文档中有详细的介绍,取值范围为[-90,0],至于为什么是这个角度范围,我个人理解是在X轴上方的均为负值,在X轴下方的均为正值,这样就不用去管什么逆时针旋转,顺时针旋转的问题,而对于RotatedRect中返回的角度angle的取值范围也就容易理解了。

三、angel角度的单位问题

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

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

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

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值