OpenCV教程-OpenCV鼠标事件
整理:python技术迷
将鼠标用作画笔
import cv2mouse_events = [j for j in dir(cv2) if 'EVENT' in j]print(mouse_events)
上面的代码将返回由OpenCV支持的所有鼠标事件的列表。
输出:
['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']
画圆
import cv2import numpy as np# Creating mouse callback functiondef draw_circle(event,x,y,flags,param):if(event == cv2.EVENT_LBUTTONDBLCLK):cv2.circle(img,(x,y),100,(255,255, 0),-1)# Creating a black image, a window and bind the function to windowimg = np.zeros((512,512,3), np.uint8)cv2.namedWindow('image')cv2.setMouseCallback('image',draw_circle)while(1):cv2.imshow('image',img)if cv2.waitKey(20) & 0xFF == 27:breakcv2.destroyAllWindows()
在上述代码中,我们首先创建了一个黑色窗口屏幕,其中发生了鼠标事件。当我们在黑色窗口上双击时,它将根据我们在回调函数中定义的内容绘制一个圆。
👉点击领取:最全Python资料合集
绘制矩形和曲线
import cv2import numpy as npdraw = False # true if the mouse is pressed. Press m to shift into curve mode.mode = True # if True, draw rectangle.a,b = -1,-1# mouse callback functiondef draw_circle(event,x,y,flags,param):global a,b,draw,modeif(event == cv2.EVENT_LBUTTONDOWN):draw = Truea,b = x,yelif (event == cv2.EVENT_MOUSEMOVE):if draw == True:if mode == True:cv2.rectangle(img,(a,b),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)elif(event == cv2.EVENT_LBUTTONUP):draw = Falseif mode == True:cv2.rectangle(img,(a,b),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)# We bind the keyboard key m to toggle between rectangle and circle.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) & 0xFFif k == ord('m'):mode = not modeelif(k == 27):breakcv2.destroyAllWindows()
输出
在上面的程序中,我们创建了两个鼠标回调函数。它与OpenCV窗口绑定在一起。在while循环中,我们设置了一个键盘绑定,将键盘键'm'用于在矩形和曲线之间切换。
热门推荐