需求
在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换。左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图。
实现思想
用鼠标画图:需要定义鼠标的回调函数mouse_event
画圆或矩形:需要定义一个画图的模式mode
左键单击、移动、释放:需要捕获三个不同的事件
开始画图,结束画图:需要定义一个画图的标记位drawing
实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import cv2 as cv import numpy as np drawing = False # 是否开始画图 mode = True # True:画矩形,False:画圆 start = ( - 1 , - 1 ) # 鼠标的回调函数的参数格式是固定的,不要随意更改。 def mouse_event(event, x, y, flags, param): global start, drawing, mode # 左键按下:开始画图 if event = = cv.EVENT_LBUTTONDOWN: drawing = True start = (x, y) # 鼠标移动,画图 elif event = = cv.EVENT_MOUSEMOVE: if drawing: if mode: cv.rectangle(img, start, (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: cv.rectangle(img, start, (x, y), ( 0 , 255 , 0 ), - 1 ) else : cv.circle(img, (x, y), 5 , ( 0 , 0 , 255 ), - 1 ) img = np.zeros(( 512 , 512 , 3 ), np.uint8) cv.namedWindow( 'image' ) cv.setMouseCallback( 'image' , mouse_event) while ( True ): cv.imshow( 'image' , img) # 按下m切换模式 if cv.waitKey( 1 ) = = ord( 'm' ): mode = not mode # 按ESC键退出程序 elif cv.waitKey( 1 ) = = 27 : break |
实验结果
以上就是python 基于opencv 实现一个鼠标绘图小程序的详细内容,更多关于python 鼠标绘图的资料请关注自学编程网其它相关文章!
- 本文固定链接: https://zxbcw.cn/post/201952/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)