Opencv实现计算两条直线或线段角度方法详解
作者:明月醉窗台 时间:2023-10-01 22:18:15
方法一
通过斜率关系计算,公式如下图:
需注意在求斜率时不要出现竖直情况,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
来源:https://blog.csdn.net/yohnyang/article/details/127600867
标签:Opencv,计算,直线,线段角度
0
投稿
猜你喜欢
asp如何显示自定义随机信息?
2010-06-08 09:39:00
Pandas 对Dataframe结构排序的实现方法
2021-11-26 09:06:48
数据库性能优化之冗余字段的作用
2011-03-03 19:21:00
PyCharm 常用快捷键和设置方法
2022-04-09 01:40:59
MySQL自定义函数简单用法示例
2024-01-20 12:47:17
Python学习笔记之抓取某只基金历史净值数据实战案例
2021-08-14 20:28:13
Python+OpenCV图像处理——实现直线检测
2021-05-15 20:13:29
Python实现查看系统启动项功能示例
2022-12-27 17:03:14
在Docker上开始部署Python应用的教程
2023-11-13 12:38:37
python中的多重继承实例讲解
2022-06-18 01:51:05
浅谈Python flask框架
2021-04-07 00:45:43
Python实现邮件自动下载的示例详解
2023-06-15 04:44:35
基于python 二维数组及画图的实例详解
2021-12-13 08:27:46
Git Submodule管理项目子模块的使用
2023-10-06 20:34:57
Python爬取商家联系电话以及各种数据的方法
2023-07-24 18:39:38
Django 生成登陆验证码代码分享
2021-07-31 06:48:21
使用git上传到码云分支的实现
2022-04-01 06:05:06
Python 限定函数参数的类型及默认值方式
2022-02-14 22:38:00
Frontpage2003的怪bug,自动添加“../”的父级目录
2007-09-30 13:30:00
Golang高性能持久化解决方案BoltDB数据库介绍
2024-01-27 00:13:37