千家信息网

如何实现OpenCV4.X鼠标回调函数

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这期内容当中小编将会给大家带来有关如何实现OpenCV4.X鼠标回调函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、回调函数setMouseCallback(
千家信息网最后更新 2026年11月04日如何实现OpenCV4.X鼠标回调函数

这期内容当中小编将会给大家带来有关如何实现OpenCV4.X鼠标回调函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、回调函数

setMouseCallback(windowName, onMouse, param=None)

windowName:窗口名称
onMouse:鼠标响应处理函数
鼠标回调函数,该函数在鼠标事件发生时被调用。鼠标事件可以是与鼠标相关的任何操作,如左键向下,左键向上,左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。 通过这个事件和位置,我们可以做任何我们想做的事情。 通过以下代码,可以列出所有的鼠标事件。

「代码」

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']

参数 含义
EVENT_MOUSEMOVE 0 滑动
EVENT_LBUTTONDOWN 1 左键点击
EVENT_RBUTTONDOWN 2 右键点击
EVENT_MBUTTONDOWN 3 中间点击
EVENT_LBUTTONUP 4 左键释放
EVENT_RBUTTONUP 5 右键释放
EVENT_MBUTTONUP 6 中间释放
EVENT_LBUTTONDBLCLK 7 左键双击
EVENT_RBUTTONDBLCLK 8 右键双击
EVENT_MBUTTONDBLCLK 9 中间双击

二、应用

1. 应用一

创建了一个简单的应用程序,只要我们双击它就可以在图像上绘制一个圆圈。

「代码」

import numpy as np
import cv2

# mouse callback function
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img, (x, y), 100, (255, 0, 0), -1)

# Create a black image, a window and bind the function to window
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)

while True:
cv2.imshow('image', img)
if cv2.waitKey(20) & 0xFF == 27:
break
cv2.destroyAllWindows()

2. 应用二

通过拖动鼠标绘制矩形或圆形(根据我们选择的模式),就像在绘图应用程序中一样。 所以我们的鼠标回调函数有两个部分,一个用于绘制矩形,另一个用于绘制圆形。在主循环中,设置键'm'设置键盘绑定进行矩形和圆之间切换。

「代码」

import numpy as np
import cv2

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
import numpy as np
import cv2

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):
global ix,iy,drawing,mode

if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y

elif event == cv2.EVENT_MOUSEMOVE:
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
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)

img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)

while True:
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break

cv2.destroyAllWindows()

上述就是小编为大家分享的如何实现OpenCV4.X鼠标回调函数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

鼠标 函数 事件 应用 代码 矩形 内容 圆形 应用程序 程序 分析 专业 两个 中小 之间 事情 位置 内容丰富 参数 名称 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 互联网扶贫科技 互联网科技logo设计 互联网 视角下的科技创新 苏州大垚互联网科技 山东吉时兔互联网科技有限公司 互联网科技项目计划书材料类 互联网对科技的发展 注册互联网科技公司经营范围大全 互联网科技研发水平 四川慕妮娅互联网科技有限公司 烟台灵鸽互联网科技有限公司 雨阳互联网卡科技有限公司 图游互联网科技 互联网科技包装股 萌小萌互联网科技河南有限公司 银川新华互联网科技学校原画 互联网大会出现的黑科技 知域互联网科技有限公司官网 广州全民伙伴互联网科技有限公司 互联网科技海报 什么是科技互联网 汇久创客互联网科技 华中科技有哪些互联网大佬 互联网科技博主是什么意思 栖莱科技互联网股份有限公司 互联网与医疗科技 广州市恰铎互联网科技有限公司 互联网企业科技类企业如何做账 华人运通互联网科技公司
0