ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

初识OpenCV-Python - 003:Mouse as a paint-brush

2019-10-19 18:00:46  阅读:261  来源: 互联网

标签:鼠标 Python cv2 003 paint FLAG mode True EVENT


此次学习了如何在OpenCV中使用鼠标事件。主要使用cv2.setMouseCallback()函数来调用鼠标事件。

首先,鼠标有如下事件:

>>> import cv2
>>>events = [i for i in dir(cv2) if 'EVENT' in i]
>>>print(events)
['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']

然后使用鼠标事件画图code:

import cv2
import numpy as np

drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1

# mouse callback function
def draw_circle(event,x,y,flags,param): #draw_circle函数需要5个函数,所以即使这里并没有使用到flags和param,我们还是要加上它
global ix,iy,drawing,mode

if event == cv2.EVENT_LBUTTONDOWN: #如果按下了鼠标,那么将drawing设置为True,从而开始画图
drawing = True
ix,iy = x,y

elif event == cv2.EVENT_MOUSEMOVE: #如果移动鼠标,并且鼠标是按下的状态,那么就开始画图,如果mode是True,那么画矩形,否则画圆形
if drawing == True:
if mode == True:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
cv2.circle(img,(x,y),5,(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('m'): #按下m改变画图类型
mode = not mode
elif k == 27: #按下Esc退出程序
break

code结果:

 


 


标签:鼠标,Python,cv2,003,paint,FLAG,mode,True,EVENT
来源: https://www.cnblogs.com/August2019/p/11704652.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有