【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 选择一个音频文件,绘制音频的波形,从右向左逐渐前进。
选择一个音频文件,绘制波形,从右向左逐渐前进。 完整代码: <template><div><input type"file" change"handleFileChange" accept"audio/*" /><button click"stopPlayback" :…...

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

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

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-25 多点电容触摸屏实验
前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…...
B3726 [语言月赛202303] String Problem P
[语言月赛202303] String Problem P 题目描述 Farmer John 有 n n n 个字符串,第 i i i 个字符串为 s i s_i si。 现在,你需要支持如下 q q q 次操作: 1 x y i:把字符串 s x s_x sx 整体插入到字符串 s y s_y sy …...

htb-linux-3-shocker
nmap web渗透 由于只有80端口,只考虑目录扫描和静态文件提醒 为什么能能知道http://10.10.10.56/cgi-bin/user.sh? 因为百度的 curl访问该文件 shell flag root...
Elasticsearch - No mapping found for [field_name] in order to sort on
chax根据关键字Action, MD5,模糊索引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 元表(Metatable)深入解析 Lua 是一种轻量级的编程语言,因其简洁性和强大的扩展能力而被广泛应用于游戏开发、脚本编写和其他领域。在 Lua 中,元表(Metatable)是一个非常重要的概念,它允许我…...
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…...

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

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

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

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

C语言实战:贪吃蛇(万字详解)
💡目录 效果图 界面设计思路 1. 基本布局 2. 视觉元素 游戏机制设计 基本规则 游戏代码 前期准备 游戏代码详解 数据结构设计 宏定义 数据结构定义 函数原型(详见后文) 主函数代码 核心代码 Review 效果图 界面设计思路 1. 基…...
定时器更新界面,线程报错
项目场景: 在javafx框架下使用线程更新UI的时候,出现无法正常更新UI。 问题代码如下: package clock;import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask;import javaf…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...