opencv测距python,python opencv边缘检测

  opencv测距python,python opencv边缘检测

  本文介绍了如何用python语言实现角度测量。该程序包括鼠标点选择、直线斜率计算和角度计算,以及一个主程序。有兴趣的可以看看。

  本文介绍了如何用python语言实现角度测量。该程序包括鼠标点选择、直线斜率计算和角度计算,以及一个主程序。最终效果:用鼠标确认图片上的三个点,程序会显示这三个点确定的角度,如下图。

  1、鼠标选点

  # -*-编码: utf-8 -*-

  导入cv2

  path= picture _ mqa angle _ measure . BMP

  img=cv2.imread(路径)

  pointsList=[]

  def mousePoints(事件,x,y,标志,参数):

  如果事件==cv2。EVENT_LBUTTONDOWN:

  cv2.circle(img,(x,y),5,(0,0,255),cv2。已填充)

  打印(x,y)

  而True:

  cv2.imshow(Image ,img)

  cv2.setMouseCallback(Image ,mousePoints)

  key_scan=cv2.waitKey(1)0xff

  if key_scan==ord(q):

  pointsList=[]

  img=cv2.imread(路径)

  elif key_scan==ord(s):

  破裂

  cv2.destroyAllWindows()

  While循环cv2.setmouseCallback (Image ,mousePoints)是鼠标中断触发事件的开始函数,用于跳转到mousePoints()中断服务函数,并为mousepoints()的五个入口参数event、X、Y、Flags和Params赋值。Event是cv2_EVENT_* (MouseEventTypes)类型的变量,是鼠标触发的中断事件的类型;x和y是鼠标触发中断事件时图像的横坐标和纵坐标;Flags是CV2 _ event _ flag _ *(鼠标事件标志)类型的变量,是特殊中断事件的标志位;Param是用户定义的参数。EVENT_LBUTTONDOW#在本文的程序中使用,通过单击鼠标左键来触发事件。用鼠标左键点击时,标记该点并记录其坐标。

  事件的分配:

  EVENT _ MOUSEMOVE # slide EVENT _ LBUTTONDOWN #左键单击EVENT_RBUTTONDOWN #右键单击EVENT_MBUTTONDOWN #左键单击以释放EVENT_RBUTTONUP #右键单击以释放EVENT_LBUTTONDBLCLK #左键单击EVENT_RBUTTONDBLCLK #右键单击EVENT_MBUTTONDBLCLK #中键单击以释放2、角度计算

  1我们可以得到鼠标点击位置的坐标,并把它们放在pointList列表中。当列表中的坐标数是3的倍数时,调用getAngle()函数计算由三点确定的两条直线的夹角。

  定义梯度(pt1,pt2):

  return((pt2[1]-pt1[1])/(pt2[0]-pt1[0])

  def getAngle(pointsList):

  pt1,pt2,pt3=pointsList[-3:]

  m1=梯度(pt1,pt2)

  m2=梯度(pt1,pt3)

  angR=ABS(math . atan((m2-m1)/(1 m2 * m1)))

  angD=round(数学学位(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),两条直线的夹角为angle 0=angle 1-angle 2=arctan(y2-y1,x2-x1)-arctan (y2-y3,x2-x3)。上面的函数可以根据三点的坐标值计算出三点所形成的角的角度。

  3、完整程序

  # -*-编码: utf-8 -*-

  测量鼠标点击的三个点所形成的角度。

  导入cv2

  导入数学

  path= picture _ mqa angle _ measure . BMP #图片路径

  img=cv2.imread(路径)

  pointsList=[]

  #鼠标中断触发函数,跟踪鼠标触发事件位置的点,并在pointList列表中记录该点的坐标值。

  #连接相邻三点形成一个夹角。

  def mousePoints(事件,x,y,标志,参数):

  如果事件==cv2。EVENT_LBUTTONDOWN:

  size=len(pointsList)

  如果大小!=0,大小为%3!=0:

  cv2.line(img,tuple(points list[round((size-1)/3)* 3]),(x,y),(0,0,255))

  cv2.circle(img,(x,y),5,(0,0,255),cv2。已填充)

  pointsList.append([x,y])

  #从两点的坐标值计算两点所在直线的斜率。

  定义梯度(pt1,pt2):

  return((pt2[1]-pt1[1])/(pt2[0]-pt1[0])

  #根据相邻三点计算夹角的角度值。

  def getAngle(pointsList):

  pt1,pt2,pt3=pointsList[-3:]

  m1=梯度(pt1,pt2)

  m2=梯度(pt1,pt3)

  angR=ABS(math . atan((m2-m1)/(1 m2 * m1)))

  angD=round(数学学位(angR))

  cv2.putText(img,str(angD),(pt1[0]-40,pt1[1]-20),cv2。FONT_HERSHEY_COMPLEX,

  1.5,(0,0,255))

  而True:

  2.imshow (image ,img) #图像显示

  2.简历。SetMouseCallback (image ,mousePoints) #鼠标触发事件打开。

  if len(pointsList) % 3==0且len(pointsList)!=0: #鼠标每触发一次中断,其形态角度的角度值计算一次。

  getAngle(pointsList)

  Key_scan=cv2.waitKey(1)0xff #键盘扫描

  如果key_scan==ord(q): #当输入 q 时,画面刷新

  pointsList=[]

  img=cv2.imread(路径)

  Elif key_scan==ord(s): #输入 s 时退出程序

  破裂

  cv2.destroyAllWindows()

  这就是这篇关于Python OpenCV角度测量的示例代码。关于Python OpenCV角度测量的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: