最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+OpenCV實現(xiàn)角度測量的示例代碼

 更新時間:2022年03月05日 11:35:27   作者:沒有水的海綿  
本文介紹如何使用python語言實現(xiàn)角度測量,程序包括鼠標(biāo)選點、直線斜率計算、角度計算三個子程序和一個主程序,感興趣的可以了解一下

本文介紹如何使用python語言實現(xiàn)角度測量,程序包括鼠標(biāo)選點、直線斜率計算、角度計算三個子程序和一個主程序。最終實現(xiàn)效果:在圖片上用鼠標(biāo)確認(rèn)三點,程序?qū)@示由此三點確定的角度,如下圖所示。

1、鼠標(biāo)選點

# -*- coding: utf-8 -*-
 
import cv2
 
path = "picture_mqa\\angle_measure.bmp"
img = cv2.imread(path)
pointsList = []
 
def mousePoints(event,x,y,flags,params):
    if event  == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img,(x,y),5,(0,0,255),cv2.FILLED)
        print(x,y)
 
while True:
    cv2.imshow('Image', img)
    cv2.setMouseCallback('Image',mousePoints)
    
    key_scan = cv2.waitKey(1) & 0xff 
    
    if key_scan == ord("q"):
        pointsList = []
        img = cv2.imread(path)
    elif key_scan == ord("s"):
        break
    
cv2.destroyAllWindows()  

while循環(huán)內(nèi)cv2.setMouseCallback('Image',mousePoints)為鼠標(biāo)中斷觸發(fā)事件的開啟函數(shù),作用是當(dāng)在Image圖片上鼠標(biāo)觸發(fā)中斷事件時,程序跳轉(zhuǎn)到mousePoints()中斷服務(wù)函數(shù)內(nèi),并給mousePoints()的五個入口參數(shù)event,x,y,flags,params賦值。其中, event是cv2_EVENT_* (MouseEventTypes)類型的變量,為鼠標(biāo)觸發(fā)中斷事件的類型;x和y為鼠標(biāo)觸發(fā)中斷事件時在image圖像的橫縱坐標(biāo);flags是cv2_EVENT_FLAG_* (MouseEventFlags)類型的變量,為特殊中斷事件的標(biāo)志位;param是用戶自定義的參數(shù)。本文的程序中使用 EVENT_LBUTTONDOW#左鍵點擊觸發(fā)事件,當(dāng)鼠標(biāo)左鍵點擊時,標(biāo)注該點并記錄其坐標(biāo)。

event的賦值:

  • EVENT_MOUSEMOVE             #滑動
  • EVENT_LBUTTONDOWN         #左鍵點擊
  • EVENT_RBUTTONDOWN        #右鍵點擊
  • EVENT_MBUTTONDOWN       #中鍵點擊
  • EVENT_LBUTTONUP               #左鍵放開
  • EVENT_RBUTTONUP              #右鍵放開
  • EVENT_MBUTTONUP              #中鍵放開
  • EVENT_LBUTTONDBLCLK      #左鍵雙擊
  • EVENT_RBUTTONDBLCLK     #右鍵雙擊
  • EVENT_MBUTTONDBLCLK    #中鍵雙擊

2、角度計算 

由1可以得到鼠標(biāo)點擊位置處的坐標(biāo),我們將其放入pointList列表內(nèi)。當(dāng)列表內(nèi)的坐標(biāo)數(shù)目為3的倍數(shù)時調(diào)用getAngle()函數(shù),計算出三點確定的兩條直線的夾角。

def gradient(pt1,pt2):
    return ((pt2[1]-pt1[1])/(pt2[0]-pt1[0]))
 
def getAngle(pointsList):
    pt1,pt2,pt3 = pointsList[-3:] 
    m1 = gradient(pt1, pt2)
    m2 = gradient(pt1, pt3)
    angR = abs(math.atan((m2-m1)/(1+m2*m1)))
    angD = round(math.degrees(angR))
    
    cv2.putText(img,str(angD),(pt1[0]-40,pt1[1]-20),cv2.FONT_HERSHEY_COMPLEX,
                1.5,(0,0,255)) 

由直線的兩點式方程可得直線的傾斜角為angle = arctan(y2-y1,x2-x1),則兩條直線的夾角為angle0 =angle1-angle2 = arctan(y2-y1,x2-x1) - arctan(y2-y3,x2-x3)。以上函數(shù)便可根據(jù)三點的坐標(biāo)值求其形成夾角的角度。

3、完整程序

# -*- coding: utf-8 -*-
'''
測量鼠標(biāo)點擊過的三點形成的角度
'''
import cv2
import math
 
path = "picture_mqa\\angle_measure.bmp"  #圖片路徑
img = cv2.imread(path)
pointsList = []
 
#鼠標(biāo)中斷觸發(fā)函數(shù),將鼠標(biāo)觸發(fā)事件位置處描點并將該點的坐標(biāo)值紀(jì)錄入pointList列表內(nèi)
#連接相鄰三點使其形成一個夾角
def mousePoints(event,x,y,flags,params):
    if event  ==cv2.EVENT_LBUTTONDOWN:
        size = len(pointsList)
        if size != 0 and size%3 !=0:
            cv2.line(img,tuple(pointsList[round((size-1)/3)*3]),(x,y),(0,0,255))
        cv2.circle(img,(x,y),5,(0,0,255),cv2.FILLED)
        pointsList.append([x,y])
 
#由兩點的坐標(biāo)值計算兩點所在直線的斜率        
def gradient(pt1,pt2):
    return ((pt2[1]-pt1[1])/(pt2[0]-pt1[0]))
 
#根據(jù)相鄰的三點計算出其形成夾角的角度值
def getAngle(pointsList):
    pt1,pt2,pt3 = pointsList[-3:] 
    m1 = gradient(pt1, pt2)
    m2 = gradient(pt1, pt3)
    angR = abs(math.atan((m2-m1)/(1+m2*m1)))
    angD = round(math.degrees(angR))
    
    cv2.putText(img,str(angD),(pt1[0]-40,pt1[1]-20),cv2.FONT_HERSHEY_COMPLEX,
                1.5,(0,0,255))       
 
 
while True:
    cv2.imshow('Image', img) #圖片顯示
    cv2.setMouseCallback('Image',mousePoints) #鼠標(biāo)觸發(fā)事件開啟
    
    if len(pointsList) % 3 ==0 and len(pointsList)!=0: #鼠標(biāo)每觸發(fā)中斷3次計算一次其形式夾角的角度值
        getAngle(pointsList)
    
    key_scan = cv2.waitKey(1) & 0xff #鍵盤掃描
    if key_scan == ord("q"):  #輸入'q'時圖片刷新
        pointsList = []
        img = cv2.imread(path)
        
    elif key_scan == ord("s"): #輸入's'時退出程序
        break
    
cv2.destroyAllWindows()

到此這篇關(guān)于Python+OpenCV實現(xiàn)角度測量的示例代碼的文章就介紹到這了,更多相關(guān)Python OpenCV角度測量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3的UnicodeDecodeError解決方法

    python3的UnicodeDecodeError解決方法

    這篇文章主要介紹了python3的UnicodeDecodeError解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 將pytorch的網(wǎng)絡(luò)等轉(zhuǎn)移到cuda

    將pytorch的網(wǎng)絡(luò)等轉(zhuǎn)移到cuda

    這篇文章主要介紹了將pytorch的網(wǎng)絡(luò)等轉(zhuǎn)移到cuda的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 淺析python表達式4+0.5值的數(shù)據(jù)類型

    淺析python表達式4+0.5值的數(shù)據(jù)類型

    在本篇文章里小編給大家整理的是一篇關(guān)于python表達式4+0.5值的數(shù)據(jù)類型的知識點內(nèi)容,需要的的朋友們學(xué)習(xí)下。
    2020-02-02
  • python實現(xiàn)鳶尾花三種聚類算法(K-means,AGNES,DBScan)

    python實現(xiàn)鳶尾花三種聚類算法(K-means,AGNES,DBScan)

    這篇文章主要介紹了python實現(xiàn)鳶尾花三種聚類算法(K-means,AGNES,DBScan),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 使用python解析MDX詞典數(shù)據(jù)并保存為Excel文件

    使用python解析MDX詞典數(shù)據(jù)并保存為Excel文件

    MDX(Mobile Dictionary eXchange)是一種常見的詞典文件格式,通常用于在移動設(shè)備和電腦之間共享辭典數(shù)據(jù),本文深入探討了從MDX詞典數(shù)據(jù)提取、處理到最終保存為Excel文件的全過程,需要的朋友可以參考下
    2023-12-12
  • python 開心網(wǎng)和豆瓣日記爬取的小爬蟲

    python 開心網(wǎng)和豆瓣日記爬取的小爬蟲

    我本科有個很幽默風(fēng)趣的量子力學(xué)老師,他說了很多批話,跟個公知似的。他的很多文章都放在了開心網(wǎng)(kaixin001.com)上,為了留個紀(jì)念,用爬蟲保存下來
    2021-05-05
  • Django 創(chuàng)建后臺,配置sqlite3教程

    Django 創(chuàng)建后臺,配置sqlite3教程

    今天小編就為大家分享一篇Django 創(chuàng)建后臺,配置sqlite3教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python中68個內(nèi)置函數(shù)的總結(jié)與介紹

    python中68個內(nèi)置函數(shù)的總結(jié)與介紹

    這篇文章主要介紹了python中68個內(nèi)置函數(shù)的總結(jié)與介紹,需要的朋友可以參考下
    2020-02-02
  • Python try-except-else-finally的具體使用

    Python try-except-else-finally的具體使用

    本文主要介紹了Python try-except-else-finally的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python繪制直方圖的示例代碼

    Python繪制直方圖的示例代碼

    本文主要介紹了如何使用Python繪制直方圖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

高青县| 石泉县| 沾化县| 淳安县| 准格尔旗| 富民县| 禄劝| 抚松县| 怀远县| 曲靖市| 长沙县| 中江县| 汨罗市| 南城县| 厦门市| 太仓市| 丰镇市| 梁平县| 南阳市| 高邮市| 岳西县| 右玉县| 西宁市| 武陟县| 柳河县| 南丹县| 漳浦县| 巫溪县| 河北省| 丰都县| 乌苏市| 宁阳县| 丹棱县| 扎鲁特旗| 正安县| 鄱阳县| 重庆市| 常熟市| 安福县| 华容县| 旬邑县|