标签:鼠标 img cv opencv FLAG circle EVENT 入门
一、鼠标事件的简单演示
opencv中的鼠标事件,值得是任何与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等。我们先来看看鼠标事件有哪些,在python中执行下面代码:
import cv2 as cv events=[i for i in dir(cv) if 'EVENT' in i] print(events)
输出结果:
['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP', 'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL', 'EVENT_RBUTTONDBLCLK', 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP']
具体的鼠标事件类型总结如下:
''' EVENT_FLAG_ALTKEY 摁住Alt EVENT_FLAG_CTRLKEY 摁住Ctrl EVENT_FLAG_LBUTTON 摁住左键 EVENT_FLAG_MBUTTON 摁住中键 EVENT_FLAG_RBUTTON 摁住右键 EVENT_FLAG_SHIFTKEY 摁住Shift EVENT_LBUTTONDBLCLK 左键双击 EVENT_LBUTTONDOWN 左键击下 EVENT_LBUTTONUP 左键弹起 EVENT_MBUTTONDBLCLK 中键双击 EVENT_MBUTTONDOWN 中键击下 EVENT_MBUTTONUP 中键弹起 EVENT_MOUSEHWHEEL 滚动条向左,flags>0。向右,flags<0 EVENT_MOUSEMOVE 鼠标移动 EVENT_MOUSEWHEEL 滚动条向上,flags>0。向下,flags<0 EVENT_RBUTTONDBLCLK 中键双击 EVENT_RBUTTONDOWN 中键击下 EVENT_RBUTTONUP 中键弹起 '''
下面我们来创建一个简单的应用程序,程序的作用很简单,无论我们在哪里双击它,都可以在图像上绘制一个圆。
首先,我们创建一个鼠标回调函数,该函数在发生鼠标事件时执行。完整的代码如下面所示。
import numpy as np import cv2 as cv # 鼠标回调函数 def draw_circle(event,x,y,flags,param): if event == cv.EVENT_LBUTTONDBLCLK: cv.circle(img,(x,y),100,(255,0,0),-1) # 创建一个黑色的图像,一个窗口,并绑定到窗口的功能 img = np.zeros((512,512,3), np.uint8) cv.namedWindow('image') cv.setMouseCallback('image',draw_circle) while(1): cv.imshow('image',img) if cv.waitKey(20) & 0xFF == 27: break cv.destroyAllWindows()
二、演示实例
下面我们再看一个例子。这个程序里我们希望能够做到像大多数绘图软件那样,通过拖动鼠标来绘制矩形或圆形(取决于我们选择的模式) 。所以我们的鼠标回调函数有两部分,一部分用于绘制矩形,另一部分用于绘制圆形。这个具体的例子对于创建和理解一些交互式应用程序非常有帮助,比如以后的章节里我们介绍到的目标跟踪,图像分割等等。
import numpy as np import cv2 as cv drawing = False # 如果按下鼠标,则为真 mode = True # 如果为真,绘制矩形。按 m 键可以切换到曲线 ix,iy = -1,-1 # 鼠标回调函数 def draw_circle(event,x,y,flags,param): global ix,iy,drawing,mode if event == cv.EVENT_LBUTTONDOWN: drawing = True ix,iy = x,y elif event == cv.EVENT_MOUSEMOVE: if drawing == True: if mode == True: cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1) else: cv.circle(img,(x,y),5,(0,0,255),-1) elif event == cv.EVENT_LBUTTONUP: drawing = False if mode == True: cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1) else: cv.circle(img,(x,y),5,(0,0,255),-1)
标签:鼠标,img,cv,opencv,FLAG,circle,EVENT,入门 来源: https://www.cnblogs.com/huangs16/p/15203241.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。