墨小澄  
鼠标处理事件:cv2.setMouseCallback()
# 1、event:其中event表示事件,回调过程中发生的是鼠标按下或放开、移动等操作。
# 2、x,y:表示鼠标此刻的在窗口中的位置信息。
# 3、flags:表示拖拽、组合键等标志,与event搭配使用
# 4、param:表示传入或传出的数据
# 5、EVENT_LBUTTONDBLCLK:左键双击
 1 import cv2
 2 # 查看所有被支持的鼠标事件,所有的鼠标事件回调函数都有个统一的格式,不同的只是被调用后的功能
 3 events = [i for i in dir(cv2) if 'EVENT' in i]
 4 print(events)
 5 
 6 # 在双击过的地方绘制一个圆
 7 import cv2
 8 import numpy as np
 9 def draw_circle(event,x,y,flags,param):
10     if event==cv2.EVENT_LBUTTONDBLCLK:
11         cv2.circle(img,(x,y),100,(255,0,0),-1)
12 # 创建图像和窗口 并将窗口和回调函数绑定
13 img=np.zeros((512,512,3),np.uint8)
14 cv2.namedWindow('image')
15 cv2.setMouseCallback('image',draw_circle)
16 while(True):
17     cv2.imshow('image',img)
18     if cv2.waitKey(20)&0xFF==27:
19         break
20 cv2.destroyAllWindows()

练习:绘制一个圆或矩形

 

 1 # 依据选择的模式在拖动鼠标是绘制矩形或者圆圈,
 2 import numpy as np
 3 import cv2
 4 # 当鼠标按下时变为True
 5 drawing=False
 6 # 如果 mode 为 true 绘制矩形,按下‘m’变成绘制曲线
 7 mode=True
 8 ix,iy=-1,-1
 9 # 创建回调函数
10 def draw_circle(event,x,y,flags,param):
11     global ix,iy,drawing,mode
12     # 当按下左键是返回起始位置坐标
13     if event==cv2.EVENT_LBUTTONDOWN:
14         drawing=True
15         ix,iy=x,y
16     # 当鼠标左键按下并移动是绘制图形,event可以查看移动,查看是否按下
17     elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
18         if drawing==True:
19             if mode==True:
20                 cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
21             else:
22                 # 绘制圆圈,小圆点连在一起就沉了线,2代表了壁画的粗细
23                 cv2.circle(img,(x,y),3,(0,0,255),-1)
24                 # 下面注释掉的代码是起始点为圆心,起点到终点为半径的
25                 # r=int(np.sqrt((x-ix)**2-(y-iy)**2))
26                 # cv2.circle(img,(x,y),r,(0,0,255),-1)
27     # 当鼠标松开停止你绘画
28     elif event==cv2.EVENT_LBUTTONUP:
29         drawing==False
30 
31 img=np.zeros((512,512,3),np.uint8)
32 cv2.namedWindow('image')
33 cv2.setMouseCallback('image',draw_circle)
34 while(1):
35     cv2.imshow('image',img)
36     k=cv2.waitKey(1)&0xff
37     if k==ord('m'):
38         mode=not mode
39     elif k==27:
40         break

 

posted on 2020-05-17 14:13  墨小澄  阅读(362)  评论(0编辑  收藏  举报