先看效果:
目标
• 学习使用 OpenCV 处理鼠标事件
• 你将要学习的函数是:cv2.setMouseCallback()
鼠标事件 :cv2.setMouseCallback()
cv2_EVENT_MOUSEMOVE 0 滑动
cv2_EVENT_LBUTTONDOWN 1 左键点击
cv2_EVENT_RBUTTONDOWN 2 右键点击
cv2_EVENT_MBUTTONDOWN 3 中间点击
cv2_EVENT_LBUTTONUP 4 左键释放
cv2_EVENT_RBUTTONUP 5 右键释放
cv2_EVENT_MBUTTONUP 6 中间释放
cv2_EVENT_LBUTTONDBLCLK 7 左键双击
cv2_EVENT_RBUTTONDBLCLK 8 右键双击
cv2_EVENT_MBUTTONDBLCLK 9 中间释放
cv2_EVENT_FLAG_LBUTTON 1 左键拖拽
cv2_EVENT_FLAG_RBUTTON 2 右键拖拽
cv2_EVENT_FLAG_MBUTTON 4 中间拖拽
cv2_EVENT_FLAG_CTRLKEY 8 (8~15)按Ctrl不放事件
cv2_EVENT_FLAG_SHIFTKEY 16 (16~31)按Shift不放事件
cv2_EVENT_FLAG_ALTKEY 32 (32~39)按Alt不放事件(后面8-39还有待研究)
代码如下:
import cv2
import numpy as np
import time
img = cv2.imread('0.jpg',1)#读取图片作为背景
#定义画圆事件,如果事件双击左键发生
#则以此时双击的点为原点画一个半径为1px BGR为(0, 0, 255)粗细为1px的圆圈
#并在点的周围显示坐标点位
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDBLCLK:
print('(x:',x,',y:',y,')')
str1 = '(x:'+ str(x) + ',y:'+ str(y) + ')'
cv2.putText(img,str1 , (x, y), cv2.FONT_HERSHEY_PLAIN,1.0, (0, 0, 255), thickness=1)
cv2.circle(img,(x,y),1,(0, 0, 255),1)
cv2.namedWindow('src')
cv2.setMouseCallback('src',draw_circle)
while(1):
cv2.imshow('src',img)
if cv2.waitKey(100) == ord('q'):#按下q退出
break
cv2.destroyAllWindows()