iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解OpenCV中简单的鼠标事件处理
  • 161
分享到

详解OpenCV中简单的鼠标事件处理

2024-04-02 19:04:59 161人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录cv2.setMouseCallback函数语法 回调函数  谈及鼠标事件,就是在触发鼠标按钮后程序所做出相应的反应,但是不影响程序的整个线程。这有

谈及鼠标事件,就是在触发鼠标按钮后程序所做出相应的反应,但是不影响程序的整个线程。这有些像异步处理。鼠标事件响应不会一直等着我们去按而后续程序不执行,这样会造成阻塞,而是在我们不按鼠标的时候程序也会正常进行,按的时候会调用鼠标的事件响应,这个过程就像程序一边正常运行一边等待鼠标响应。

为了将鼠标响应和操作画面进行绑定,我们要创建一个回调函数:

cv2.setMouseCallback函数语法

cv2.setMouseCallback(img,onMouse)

cv2.setMouseCallback函数参数解释:

img:要绑定画面的名字

onMouse:响应函数,即当鼠标事件触发时调用的函数。

示例代码:

cv2.setMouseCallback('image',draw_circle)

举个例子:

当我们在画面内单击的时候,会回调draw_circle函数,而这个被调用的函数成为响应函数,它的作用是画一个圆。调用这个函数后,我们就实现了画面与回调函数的绑定。

011-2-鼠标事件

查看所有被支持的鼠标事件:

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

 回调函数  

OpenCV中没有特定的写好的回调函数供我们直接使用,这需要我们自己编写,回调函数的模板如下:

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

函数分析:

代码第一行:是我们设置的函数名draw_circle以及它的参数,第一个参数event表示在什么事件下调用这个函数,x ,y可以理解为图像中鼠标指针所在的像素点的坐标值,后面两个参数暂时不用理解。

代码第二行:是事件的判定,如果发出了该事件,那么执行第三行的代码。

下面我们来通过双击鼠标左键画一个圆:

import cv2
import numpy as np
#设置回调函数
def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img,(x,y),100,(255,0,0),-1)
#创建图像与窗口并将窗口与回调函数进行绑定
img = np.zeros((500,500,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    if cv2.waitKey(1)&0xFF == ord('q'):
        break
cv2.destroyAllwindows()

结果:

在通过拖动鼠标画一个矩形:

import cv2
import numpy as np
#按下鼠标时为True
drawing = False
#当mode为true时绘制矩形,按下m后mode变成false,用来绘制曲线
mode = True
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
    #当移动鼠标时绘制图形,event可以查看移动效果,flag检测是否发生单击
    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:
                #绘制圆圈,圆点连成线,3代表笔的粗细
                cv2.circle(img,(x,y),3,(0,255,0),-1)
    #当松开鼠标时停止绘制
    elif event == cv2.EVENT_LBUTTONUP:
        drawing ==False
#创建图像与窗口并将窗口与回调函数进行绑定
img = np.zeros((500,500,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1)
    if k == ord('m'):
        mode=not mode
    elif k == ord('q'):
        break
    elif k == ord('r'):
        img = np.zeros((500,500,3),np.uint8)
        cv2.namedWindow('image')
        cv2.setMouseCallback('image',draw_circle)
cv2.destroyAllWindows()
 

结果:

到此这篇关于详解OpenCV中简单的鼠标事件处理的文章就介绍到这了,更多相关OpenCV鼠标事件处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解OpenCV中简单的鼠标事件处理

本文链接: https://www.lsjlt.com/news/162273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解OpenCV中简单的鼠标事件处理
    目录cv2.setMouseCallback函数语法 回调函数  谈及鼠标事件,就是在触发鼠标按钮后程序所做出相应的反应,但是不影响程序的整个线程。这有...
    99+
    2024-04-02
  • ECharts鼠标事件的处理方法详解
    事件是用户或浏览器自身执行的某种动作,如click、mouseover、页面加载完毕后触发load事件,都属于事件。 为了记录用户的操作和行为路径,需要完成鼠标事件处理和组件交互的行...
    99+
    2024-04-02
  • vue中怎么处理鼠标划过事件
    本篇文章给大家分享的是有关vue中怎么处理鼠标划过事件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。鼠标事件进行监听需求中,在一个table(...
    99+
    2024-04-02
  • Java中关于MouseWheelListener的鼠标滚轮事件详解
    目录关于MouseWheelListener的鼠标滚轮事件一、MouseWheelListener接口二、public int getWheelRotation()Java获取鼠标滚...
    99+
    2024-04-02
  • C#鼠标事件的处理机制是什么
    本篇内容介绍了“C#鼠标事件的处理机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#鼠标事件包括鼠标的很多操作,比如为用户提供鼠标...
    99+
    2023-06-17
  • pygame实现键盘和鼠标事件的处理
    所谓事件,就是程序上发生的事。例如用户按下键盘上的某个键或者单击、移动鼠标,对于这些事件,游戏程序需要作出反应。如《 pygame 图像/图形绘制》中例子,程序会一直运行下去,直到用...
    99+
    2024-04-02
  • vue下如何处理鼠标划过事件
    这篇文章主要介绍“vue下如何处理鼠标划过事件”,在日常操作中,相信很多人在vue下如何处理鼠标划过事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue下如何处理鼠标划过事件”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-04
  • React事件处理和表单的绑定详解
    目录一、事件处理1.1 React事件1.2 事件对象1.3 事件传参1.4 函数组件事件处理二、表单一、事件处理 1.1 React事件 React 元素的事件处理和 DOM 元素...
    99+
    2024-04-02
  • WPF中鼠标/键盘/拖拽事件以及用行为封装事件详解
    目录鼠标事件键盘输入事件拖拽事件用行为封装事件用事件来实现用行为来封装本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述...
    99+
    2023-03-02
    WPF鼠标事件 WPF键盘事件 WPF拖拽事件 WPF封装事件 WPF事件
  • Python+Selenium键盘鼠标模拟事件操作详解
    目录元素的基本操作鼠标键盘模拟事件操作利用 Keys 模块模拟键盘操作事件利用 Action 类模拟鼠标操作事件当我们定位到具体的一个元素的时候就可以对这个元素进行具体的操作,比如之...
    99+
    2024-04-02
  • 怎么在pygame中对键盘和鼠标事件进行处理
    本篇文章为大家展示了怎么在pygame中对键盘和鼠标事件进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。pygame 的常用事件如下所示:事件产生途径参数QUIT用户按下“关闭”按钮NoneA...
    99+
    2023-06-14
  • Python+OpenCV实现鼠标画瞄准星的方法详解
    目录函数说明cv2.circle()cv2.line()简单的例子利用鼠标回调函数画瞄准星所谓瞄准星指的是一个圆圈加一个圆圈内的十字线,就像玩射击游戏狙击枪开镜的样子一样。这里并不是...
    99+
    2024-04-02
  • Vue中的事件处理详情
    目录一、事件处理二、事件修饰符三、键盘事件使用技巧一、事件处理 给按钮绑定一个 click 事件,点击弹出提示信息 <!--普通写法--> <button...
    99+
    2024-04-02
  • Java中MouseWheelListener的鼠标滚轮事件分析
    本篇内容主要讲解“Java中MouseWheelListener的鼠标滚轮事件分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中MouseWheelListener的鼠标滚轮事件分析”...
    99+
    2023-06-21
  • jquery中 鼠标移动的事件方法是()
    jQuery是目前应用最广泛的JavaScript库之一,它封装了许多JavaScript操作,极大地方便了前端开发人员的工作。在jQuery中,鼠标移动事件非常常见,开发者可以使用不同的方法来处理这些事件。下面,我们来了解一下在jQuer...
    99+
    2023-05-18
  • javascript简单事件处理和with用法介绍
    这一期介绍一些简单的事件处理: 1.鼠标点击 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio...
    99+
    2022-11-15
    事件处理 with用法
  • PythonTkinter之事件处理详解
    目录事件绑定方法常用事件类型Event事件对象事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正...
    99+
    2024-04-02
  • JavaScript中的键盘、鼠标事件怎么实现
    本文小编为大家详细介绍“JavaScript中的键盘、鼠标事件怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中的键盘、鼠标事件怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2024-04-02
  • 鼠标单击变双击的详细解决方法
    如果你的鼠标单击变成了双击,可能是由于以下几个原因:1. 鼠标设置问题:首先,你可以尝试检查一下你的鼠标设置。在Windows系统中...
    99+
    2023-09-07
    鼠标
  • javascript鼠标按下后松开鼠标时触发此事件使用什么函数,详细讲解
    这篇文章将为大家详细讲解有关javascript鼠标按下后松开鼠标时触发此事件使用什么函数,详细讲解,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。鼠标按下后松开鼠标时触发的事件 简介 当鼠标指针悬停在元素...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作