首先我们来创建一个鼠标事件回调函数:cv2.setMouseCallback(),但鼠标事件发生是他就会被执行。 鼠标事件可以是鼠标上的任何动作,比如左键按下,左键松开,左键双击等。 我们可以通过鼠标事件获得与鼠标对应的图片上的坐标。根据这些信息我们可 以做任何我们想做的事。
#coding:utf-8
import cv2
import numpy as np
drawing = False
mode = True#修改绘制模式True为画矩形,False为点绘制
ix, iy = -1,-1
def draw_circle(event, x, y, flags,param):
global ix, iy, drawing, mode
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, y
elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
if drawing == True:
if mode == True:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
cv2.circle(img, (x,y),3,(0,0,255),-1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while(1):
cv2.imshow('image', img)
k = cv2.waitKey(1)&0xFF
if k == ord('c'):
mode = not mode
elif k == 27:
break
结果图: