Opencv实现计算两条直线或线段角度方法详解
作者:明月醉窗台 发布时间:2023-10-01 22:18:15
标签: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
来源:https://blog.csdn.net/yohnyang/article/details/127600867
0
投稿
猜你喜欢
- 一个网站的一个页面download.asp通过判断referer来确定是不是从他本站点过来的链接,使用这个功能我们可以用来防止下载盗链,当然
- 有些时候我们发现一些模块没有提供pip install 命令和安装教程 , 只提供了一个setup.py文件 , 这个时候如何安装呢?步骤打
- CSS3草案中定义了{opacity:来声明元素的透明度,这已经得到了大多数现代浏览器的支持,而IE则很早通过特定的私有属性filter来实
- 目录一、pyecharts绘制饼图语法简介二、绘制普通饼图三、绘制圆环图四、绘制饼图-玫瑰图一、pyecharts绘制饼图语法简介饼图主要用
- 有个帖子写的检查全角的 <script> fun
- 最近看ECShop到网上找资料,发现好多说明ECShop的文件结构不全面,于是想自己弄个出来。但这是个无聊耗时的工作,自己就写了个Pytho
- 首先我们有一个数据是一个mn的numpy矩阵现在我们希望能够进行给他加上一列变成一个m(n+1)的矩阵import numpy as npa
- 1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
- <% String st = ""; for(int i = 1; i <= 9;
- 引言今年互联网的就业环境真的好糟糕啊,好多朋友被优化。我们平常在工作中除了撸好代码,跑通项目之外,还要注意内外兼修。内功和招式都得练👌,才能
- python 如何实现Excel 的Vlookup功能1、Excel 中VLOOKUP具体步骤Excel 中的VLOOKUP使用说明采用下面
- 设计网站的同志背景主要有两种:学计算机、学艺术。基本上会写代码的不懂设计,会设计的不懂代码,这个格局似乎到今天还没变。某些学计算机的同学,有
- 这是个郁闷的问题。主级获得ID列表 select ID from FS_SD_Address where PID=0
- 如何为XHTML做好准备,XHTML与HTML 4.01标准没有太多的不同。所以将你的代码升级至4.01是个不错的开始。HTML 4.01参
- 本文借用HTML的css语法,将样式表应用到窗口部件。这里只是个简单的例子,实际上样式表的语法很丰富。以下类似于css: StyleShee
- 控制的前提是已经运行Microsip.exe 首先选择文件,选择txt格式文件,一行一个手机号格式;如下点击拨打下一个
- HTTP应答头概述 Web服务器的HTTP
- 最近,我在做网页的时候,经理老是反应网页中一些栏目中没有背景图片。我说:背景图片有的,你刷新看看。但是他说:我可以刷新看看,但是你不能老是让
- 目录1.准备工作2. 开始2.1 生成控件2.2 定义输入和计算函数2.3 绑定键盘事件2.4 循环3.全部代码4. 结束语做一个计算器,这
- 14个超酷的js显示时间效果,一定有你想要的。正常时间显示运行效果图:<title>正常显示的时钟 - asp之家 - http