当前位置: 首页 > news >正文

【python】OpenCV GUI——Mouse(14.1)

在这里插入图片描述

参考学习来自

文章目录

  • 背景知识
  • cv2.setMouseCallback 介绍
  • 小试牛刀

背景知识

GUI(Graphical User Interface,图形用户界面) 是一种允许用户通过图形元素(如窗口、图标、菜单和按钮)与电子设备进行交互的界面。与传统的命令行界面(CLI,Command Line Interface) 相比,GUI 提供了更加直观和易于使用的界面,使得用户无需记忆复杂的命令或语法即可操作设备。

GUI 的主要组成部分包括:

  • 窗口:屏幕上可以独立移动和缩放的矩形区域,用于显示内容或执行特定任务。
  • 图标:表示程序、文件、文件夹或命令的小型图像。
  • 菜单:列出可用命令或选项的列表,用户可以通过鼠标或键盘选择。
  • 按钮:用户可以点击以执行特定命令或操作的图形元素。
  • 文本框:允许用户输入和编辑文本的区域。
  • 对话框:临时窗口,用于接收用户输入或显示信息。
  • 滚动条:允许用户滚动查看长列表或大量内容的小部件。
  • 工具栏:包含常用命令或操作的图标按钮集合。
  • 光标:屏幕上的指示器,显示用户当前正在操作的位置。

GUI 的设计旨在提高用户体验和效率,使用户能够更轻松地完成任务。不同的操作系统和应用程序可能会使用不同的 GUI 风格和约定,但大多数 GUI 都遵循相似的交互原则和设计规范。

在计算机视觉和图像处理领域,GUI 通常用于显示图像、视频或处理结果,以及允许用户通过界面进行参数调整、图像编辑或选择等操作。OpenCV 是一个强大的计算机视觉库,虽然它本身主要关注图像处理和分析的算法实现,但它也提供了一些基本的 GUI 功能,如图像显示、滑动条和鼠标事件处理等,以便用户能够更方便地与图像数据进行交互。然而,对于更复杂的 GUI 需求,开发人员通常会使用专门的 GUI 工具包或框架来构建应用程序界面。

在 OpenCV 中,GUI(图形用户界面)功能主要用于显示图像、处理用户输入(如鼠标点击和键盘按键)以及创建简单的交互界面。OpenCV 提供了一些基本的 GUI 功能,如显示图像窗口、设置鼠标和键盘回调函数、滑动条(Trackbar)等。

这些功能使得 OpenCV 在图像处理和计算机视觉任务中非常有用,尤其是当你需要与用户进行交互时。然而,如果你需要更复杂的 GUI 功能(如按钮、文本框等),那么可能需要考虑使用其他库,如 Tkinter、PyQt、wxPython 等,这些库提供了更丰富的 GUI 控件和更强大的功能。

cv2.setMouseCallback 介绍

cv2.setMouseCallback 是 OpenCV 库中用于设置鼠标回调函数的方法。它允许开发者在 OpenCV 窗口中进行鼠标交互操作,如鼠标点击、拖动等。以下是关于 cv2.setMouseCallback 的中文文档,包含其用法、参数说明以及使用示例。

一、函数用途

cv2.setMouseCallback 用于设置鼠标回调函数,以便在 OpenCV 窗口中检测和处理鼠标事件(如左键点击、右键点击等)。

二、函数语法

cv2.setMouseCallback(windowName, onMouseCallback[, userdata=None])

参数说明

  • windowName(必填):字符串类型,表示要绑定鼠标回调函数的窗口名称。这个窗口需要先通过 cv2.namedWindow() 函数创建。
  • onMouseCallback(必填):一个回调函数,用于处理鼠标事件。当在 windowName 指定的窗口中发生鼠标事件时,该函数将被调用。该函数需要接收五个参数:
    • event:整数类型,表示鼠标事件类型(如左键点击、右键点击等)。
    • x:整数类型,表示鼠标事件发生的 x 坐标(以像素为单位)。
    • y:整数类型,表示鼠标事件发生的 y 坐标(以像素为单位)。
    • flags:整数类型,表示鼠标事件的标志(如鼠标按键状态、鼠标拖动状态等)。
    • param:可选参数,传递给回调函数的附加数据(如果有的话)。
  • userdata(可选):传递给 onMouseCallback 的附加参数。如果没有提供,则默认为 None。
    三、鼠标事件类型
    OpenCV 支持多种鼠标事件类型,包括:

cv2.EVENT_LBUTTONDOWN:左键按下事件。
cv2.EVENT_LBUTTONUP:左键释放事件。
cv2.EVENT_RBUTTONDOWN:右键按下事件。
cv2.EVENT_RBUTTONUP:右键释放事件。
cv2.EVENT_MBUTTONDOWN:中键按下事件。
cv2.EVENT_MBUTTONUP:中键释放事件。
cv2.EVENT_MOUSEMOVE:鼠标移动事件。

小试牛刀

import cv2# 列表来存储边界框坐标
top_left_corner = []
bottom_right_corner = []# 函数将在鼠标输入时被调用
def drawRectangle(action, x, y, flags, *param):# 引用全局变量global top_left_corner, bottom_right_corner# 当按下鼠标左键时,标记左上角if action == cv2.EVENT_LBUTTONDOWN:top_left_corner = [(x, y)]# 当松开鼠标左键时,标记右下角,与此同时画框elif action == cv2.EVENT_LBUTTONUP:bottom_right_corner = [(x, y)]# 画矩形cv2.rectangle(image, top_left_corner[0], bottom_right_corner[0], (0, 255, 0), 2, 8)cv2.imshow("Window", image)# 读取图片
image = cv2.imread("1.jpg")
# 制作临时图像
temp = image.copy()
# 创建命名窗口
cv2.namedWindow("Window")
# 鼠标事件发生时调用的 Highgui 函数
cv2.setMouseCallback("Window", drawRectangle)k = 0
# 按下q键关闭窗口
while k != 113:  # q# 显示图像cv2.imshow("Window", image)k = cv2.waitKey(0)# 如果按下c,使用虚拟图像清除窗口if k == 99:  # cimage = temp.copy()cv2.imshow("Window", image)cv2.destroyAllWindows()

输入图片

在这里插入图片描述
鼠标拖动画框

在这里插入图片描述

按 c 键 清空所绘制的矩形框,通过显示一个新的原始图片来实现

在这里插入图片描述

按 q 键退出程序

相关文章:

【python】OpenCV GUI——Mouse(14.1)

参考学习来自 文章目录 背景知识cv2.setMouseCallback 介绍小试牛刀 背景知识 GUI(Graphical User Interface,图形用户界面) 是一种允许用户通过图形元素(如窗口、图标、菜单和按钮)与电子设备进行交互的界面。与传统…...

搭建python虚拟环境,并在VSCode中使用

创建环境 python -m venv E:\python\flask\venv激活环境 运行下图所示的bat文件 退出环境 执行下面的语句 deactivateVSCode中配置: ①使用CTRLshiftp命令,使用CTRLshiftp命令,输入: Python: Select Interpreter②选择之前创建…...

Vuex3学习笔记

文章目录 1,入门案例辅助函数 2,mutations传参辅助函数 3,actions辅助函数 4,getters辅助函数 5,模块拆分6,访问子模块的state辅助函数 7,访问子模块的getters辅助函数 8,访问子模块…...

harbor1.7.1的访问报错502 bad gateway

背景: 在访问harbor镜像仓库时提示报错如下: 问题分析: 根据提供的报错内容来看时harbor服务的nginx组件服务异常了的,导致无法访问harbor服务,查看harbor服务结果如下: serviceharbor:~/harbor$ docker…...

【C++ STL】模拟实现 string

标题:【C :: STL】手撕 STL _string 水墨不写bug (图片来源于网络) C标准模板库(STL)中的string是一个可变长的字符序列,它提供了一系列操作字符串的方法和功能。 本篇文章,我们将模拟实现STL的…...

js 选择一个音频文件,绘制音频的波形,从右向左逐渐前进。

选择一个音频文件&#xff0c;绘制波形&#xff0c;从右向左逐渐前进。 完整代码&#xff1a; <template><div><input type"file" change"handleFileChange" accept"audio/*" /><button click"stopPlayback" :…...

灵动岛动效:打造沉浸式用户体验

灵动岛是专属于 iPhone 14 Pro 系列交互UI&#xff0c;通过通知消息的展示和状态的查看与硬件相结合&#xff0c;让 iPhone 14 Pro 系列的前置摄像头和传感器的“感叹号”&#xff0c;发生不同形状的变化。这样做的好处是让虚拟软件和硬件的交互变得更为流畅&#xff0c;以便让…...

VSCode数据库插件

Visual Studio Code (VS Code) 是一个非常流行的源代码编辑器&#xff0c;它通过丰富的插件生态系统提供了大量的功能扩展。对于数据库操作&#xff0c;VS Code 提供了几种插件&#xff0c;其中“Database Client”系列插件是比较受欢迎的选择之一&#xff0c;它包括了对多种数…...

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-25 多点电容触摸屏实验

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…...

B3726 [语言月赛202303] String Problem P

[语言月赛202303] String Problem P 题目描述 Farmer John 有 n n n 个字符串&#xff0c;第 i i i 个字符串为 s i s_i si​。 现在&#xff0c;你需要支持如下 q q q 次操作&#xff1a; 1 x y i&#xff1a;把字符串 s x s_x sx​ 整体插入到字符串 s y s_y sy​ …...

htb-linux-3-shocker

nmap web渗透 由于只有80端口&#xff0c;只考虑目录扫描和静态文件提醒 为什么能能知道http://10.10.10.56/cgi-bin/user.sh&#xff1f; 因为百度的 curl访问该文件 shell flag root...

Elasticsearch - No mapping found for [field_name] in order to sort on

chax根据关键字Action, MD5&#xff0c;模糊索引202*.log查询 curl -u user:password -H "Content-Type: application/json" http://127.1:9200/202*.log/_search?pretty -XPOST -d {"query": {"bool": {"should": [{"bool"…...

Lua 元表(Metatable)深入解析

Lua 元表&#xff08;Metatable&#xff09;深入解析 Lua 是一种轻量级的编程语言&#xff0c;因其简洁性和强大的扩展能力而被广泛应用于游戏开发、脚本编写和其他领域。在 Lua 中&#xff0c;元表&#xff08;Metatable&#xff09;是一个非常重要的概念&#xff0c;它允许我…...

MySQL Show命令集

MySQL SHOW 命令 1、mysql shell 查看帮助show (rootlocalhost) [(none)]> \help show Name: SHOW Description: SHOW has many forms that provide information about databases, tables, columns, or status information about the server. This section describes thos…...

倩女幽魂搬砖攻略:云手机自动托管搬砖刷本选哪家云手机?

欢迎来到《倩女幽魂手游》的世界&#xff0c;一个充满江湖恩怨的世界。在这个游戏中&#xff0c;你将扮演各个门派中的不同职业&#xff0c;踏上一段属于你自己的江湖之路。本攻略将为你详细介绍如何利用多开挂机搬砖&#xff0c;快速提升自己的实力&#xff0c;成为江湖中的一…...

php7.3安装phalcon扩展

php7安装3.4版本的phalcon扩展 适用于Centos6.x和Centos7.x系统&#xff0c;php使用7.1版本&#xff0c;wlnmp一键包已支持该扩展 phalcon扩展包地址&#xff1a;https://github.com/phalcon/cphalcon &#xff08;git clone 有可能连接不上&#xff09; 1、安装所需依赖&a…...

IIoT(智能物联网)的现状、应用及安全

近年来&#xff0c;物联网&#xff08;IoT&#xff09;作为推动现代公司和智能城市发展的一个范式&#xff0c;已经取得了显著的发展。IoT使得分布式设备&#xff08;如手机、平板电脑和计算机&#xff09;能够感知并从外部环境传输数据&#xff0c;以服务于最终用户。IoT的概念…...

YOLOv8_obb的训练、验证、预测及导出[旋转目标检测实践篇]

1.旋转目标检测数据集划分和配置 从上面得到的images和labels数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的…...

C语言实战:贪吃蛇(万字详解)

&#x1f4a1;目录 效果图 界面设计思路 1. 基本布局 2. 视觉元素 游戏机制设计 基本规则 游戏代码 前期准备 游戏代码详解 数据结构设计 宏定义 数据结构定义 函数原型&#xff08;详见后文&#xff09; 主函数代码 核心代码 Review 效果图 界面设计思路 1. 基…...

定时器更新界面,线程报错

项目场景&#xff1a; 在javafx框架下使用线程更新UI的时候&#xff0c;出现无法正常更新UI。 问题代码如下&#xff1a; package clock;import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask;import javaf…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...