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

1、鼠标选点

while循环内cv2.setmousecallback(‘image’,mousepoints)为鼠标中断触发事件的开启函数,作用是当在image图片上鼠标触发中断事件时,程序跳转到mousepoints()中断服务函数内,并给mousepoints()的五个入口参数event,x,y,flags,params赋值。其中, event是cv2_event_* (mouseeventtypes)类型的变量,为鼠标触发中断事件的类型;x和y为鼠标触发中断事件时在image图像的横纵坐标;flags是cv2_event_flag_* (mouseeventflags)类型的变量,为特殊中断事件的标志位;param是用户自定义的参数。本文的程序中使用 event_lbuttondow#左键点击触发事件,当鼠标左键点击时,标注该点并记录其坐标。

event的赋值:

  • event_mousemove             #滑动
  • event_lbuttondown         #左键点击
  • event_rbuttondown        #右键点击
  • event_mbuttondown       #中键点击
  • event_lbuttonup               #左键放开
  • event_rbuttonup              #右键放开
  • event_mbuttonup              #中键放开
  • event_lbuttondblclk      #左键双击
  • event_rbuttondblclk     #右键双击
  • event_mbuttondblclk    #中键双击

2、角度计算 

由1可以得到鼠标点击位置处的坐标,我们将其放入pointlist列表内。当列表内的坐标数目为3的倍数时调用getangle()函数,计算出三点确定的两条直线的夹角。

由直线的两点式方程可得直线的倾斜角为angle = arctan(y2-y1,x2-x1),则两条直线的夹角为angle0 =angle1-angle2 = arctan(y2-y1,x2-x1) – arctan(y2-y3,x2-x3)。以上函数便可根据三点的坐标值求其形成夹角的角度。

3、完整程序

到此这篇关于python+opencv实现角度测量的示例代码的文章就介绍到这了,更多相关python opencv角度测量内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!