Opencv实现计算两条直线或线段角度方法详解

 更新时间:2022年12月07日 14:26:20   作者:明月醉窗台  
这篇文章主要介绍了Opencv实现计算两条直线或线段角度方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

方法一

通过斜率关系计算,公式如下图:

需注意在求斜率时不要出现竖直情况,python计算会报错,但按理说应该可以计算出无穷的,此处先放这吧,等后期有时间再来解释这里原因。

#openpose求角度
def GetAngle(line1, line2):
    """
    计算两条线段之间的夹角,若已知两直线斜率:m1,m2
     angle = atan(abs((m2 - m1) / (1 + (m2 * m1)))
    :param line1:
    :param line2:
    :return:
    """
    dx1 = line1[0][0] - line1[1][0]
    dy1 = line1[0][1] - line1[1][1]
    dx2 = line2[0][0] - line2[1][0]
    dy2 = line2[0][1] - line2[1][1]
    #求斜率
    m1=dy1/dx1
    m2=dy2/dx2
    insideAngle=math.atan(abs((m2-m1)/(1+(m1*m2))))
    angle=insideAngle/math.pi*180
    if angle>-370 and angle<370:
        angle=int(angle)
    return angle

方法二

#openpose求角度
def GetAngle(line1, line2):
    """
    计算两条线段之间的夹角
    :param line1:
    :param line2:
    :return:
    """
    dx1 = line1[0][0] - line1[1][0]
    dy1 = line1[0][1] - line1[1][1]
    dx2 = line2[0][0] - line2[1][0]
    dy2 = line2[0][1] - line2[1][1]
    angle1 = math.atan2(dy1, dx1)
    angle1 = int(angle1 * 180 / math.pi)
    # print(angle1)
    angle2 = math.atan2(dy2, dx2)
    angle2 = int(angle2 * 180 / math.pi)
    # print(angle2)
    if angle1 * angle2 >= 0:
        insideAngle = abs(angle1 - angle2)
    else:
        insideAngle = abs(angle1) + abs(angle2)
        if insideAngle > 180:
            insideAngle = 360 - insideAngle
    insideAngle = insideAngle % 180
    return insideAngle

方法三

通过余弦定理计算三点角度:

若三边为a,b,c ,则如图所示,在△ABC中:

使用前提:分母不要有出现0的情况。

实现:通过三点构成三角形,先计算各边长度,再带入余弦公式求解角度

def DIST(p1,p2):
    '''
    func:求两点间距离
    @para p1,p2:点坐标(x1,y1),(x2,y2)
    @para return:距离
    '''
    return math.sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]))
# #openpose求角度
def GetAngle(p1,p2,p3):
    """
    若已知3点,求以中间点为原点的夹角
    :param p1,p2,p3:点坐标(x,y)
    :param return: 角度
    """
    #余弦定理求夹角
    A=DIST(p1,p2)
    B=DIST(p2,p3)
    C=DIST(p1,p3)
    angle=math.acos((A*A+B*B-C*C)/(2*A*B))
    return angle/math.pi*180

到此这篇关于Opencv实现计算两条直线或线段角度方法详解的文章就介绍到这了,更多相关Opencv计算两条直线内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python出现RuntimeError错误问题及解决

    python出现RuntimeError错误问题及解决

    这篇文章主要介绍了python出现RuntimeError错误问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 玩转python selenium鼠标键盘操作(ActionChains)

    玩转python selenium鼠标键盘操作(ActionChains)

    这篇文章主要为大家详细介绍了python selenium鼠标键盘操作(ActionChains),教大家如何玩转selenium鼠标键盘,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 实现 Python 脚本生成命令行

    实现 Python 脚本生成命令行

    这篇文章主要介绍了实现 Python 脚本生成命令行,文章通过定义一个 scrape 方法展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python3之外部文件调用Django程序操作model等文件实现方式

    Python3之外部文件调用Django程序操作model等文件实现方式

    这篇文章主要介绍了Python3之外部文件调用Django程序操作model等文件实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 模型训练时GPU利用率太低的原因及解决

    模型训练时GPU利用率太低的原因及解决

    这篇文章主要介绍了模型训练时GPU利用率太低的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python使用pyh生成HTML文档的方法示例

    Python使用pyh生成HTML文档的方法示例

    这篇文章主要介绍了Python使用pyh生成HTML文档的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Pycharm无法正常安装第三方库的几条应对方法汇总

    Pycharm无法正常安装第三方库的几条应对方法汇总

    在使用pycharm学习python的时候,经常需要第三方库,没有第三方库程序就会报错,下面这篇文章主要给大家介绍了关于Pycharm无法正常安装第三方库的几条应对方法,需要的朋友可以参考下
    2023-04-04
  • Python Pillow Image Invert

    Python Pillow Image Invert

    今天小编就为大家分享一篇关于Python Pillow Image Invert,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • python使用pyqt写带界面工具的示例代码

    python使用pyqt写带界面工具的示例代码

    本篇文章主要介绍了python使用pyqt写带界面工具的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 关于使用python对mongo多线程更新数据

    关于使用python对mongo多线程更新数据

    这篇文章主要介绍了关于使用python对mongo多线程更新数据,文中提供了详细的代码说明,实际使用时,需要根据具体情况进行调整和优化,需要的朋友可以参考下
    2023-04-04

最新评论