Opencv實(shí)現(xiàn)計(jì)算兩條直線或線段角度方法詳解
方法一
通過(guò)斜率關(guān)系計(jì)算,公式如下圖:
需注意在求斜率時(shí)不要出現(xiàn)豎直情況,python計(jì)算會(huì)報(bào)錯(cuò),但按理說(shuō)應(yīng)該可以計(jì)算出無(wú)窮的,此處先放這吧,等后期有時(shí)間再來(lái)解釋這里原因。
#openpose求角度 def GetAngle(line1, line2): """ 計(jì)算兩條線段之間的夾角,若已知兩直線斜率: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): """ 計(jì)算兩條線段之間的夾角 :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
方法三
通過(guò)余弦定理計(jì)算三點(diǎn)角度:
若三邊為a,b,c ,則如圖所示,在△ABC中:
使用前提:分母不要有出現(xiàn)0的情況。
實(shí)現(xiàn):通過(guò)三點(diǎn)構(gòu)成三角形,先計(jì)算各邊長(zhǎng)度,再帶入余弦公式求解角度
def DIST(p1,p2): ''' func:求兩點(diǎn)間距離 @para p1,p2:點(diǎn)坐標(biāo)(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點(diǎn),求以中間點(diǎn)為原點(diǎn)的夾角 :param p1,p2,p3:點(diǎn)坐標(biāo)(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
到此這篇關(guān)于Opencv實(shí)現(xiàn)計(jì)算兩條直線或線段角度方法詳解的文章就介紹到這了,更多相關(guān)Opencv計(jì)算兩條直線內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)打包成庫(kù)供別的模塊調(diào)用
這篇文章主要介紹了Python實(shí)現(xiàn)打包成庫(kù)供別的模塊調(diào)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07matplotlib subplots 調(diào)整子圖間矩的實(shí)例
今天小編就為大家分享一篇matplotlib subplots 調(diào)整子圖間矩的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python的條件表達(dá)式和lambda表達(dá)式實(shí)例
今天小編就為大家分享一篇Python的條件表達(dá)式和lambda表達(dá)式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01python實(shí)現(xiàn)CSF地面點(diǎn)濾波算法原理解析
這篇文章主要介紹了python實(shí)現(xiàn)CSF地面點(diǎn)濾波算法原理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例
今天小編就為大家分享一篇PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Python Web日志管理與監(jiān)控實(shí)踐指南
這篇文章主要介紹了Python Web日志管理與監(jiān)控實(shí)踐指南,文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-09-09研究Python的ORM框架中的SQLAlchemy庫(kù)的映射關(guān)系
這篇文章主要介紹了研究Python的ORM框架中的SQLAlchemy庫(kù)的映射關(guān)系,SQLAlchemy庫(kù)是一個(gè)常見(jiàn)的Python中操作數(shù)據(jù)庫(kù)的工具,需要的朋友可以參考下2015-04-04Python抓取京東圖書(shū)評(píng)論數(shù)據(jù)
最近接了個(gè)項(xiàng)目,需要抓取京東圖書(shū)的評(píng)論,把代碼放出來(lái)給大家分享下,希望能有所幫助2014-08-08