当前位置: 首页 > 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…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...