最终实现效果:在图片上用鼠标确认三点,程序将会显示由此三点确定的角度,如下图所示。 1、鼠标选点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # -*- coding: utf-8 -*- import
最终实现效果:在图片上用鼠标确认三点,程序将会显示由此三点确定的角度,如下图所示。 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的赋值:
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、完整程序
|
2019-06-18
2019-07-04
2021-05-23
2021-05-27
2021-05-27