OpenCV高级图形用户界面(15)注册一个回调函数来处理鼠标事件的函数setMouseCallback()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

为指定的窗口设置鼠标处理器。

setMouseCallback 是 OpenCV 中的一个功能,允许开发者注册一个回调函数来处理鼠标事件。当用户在窗口中移动鼠标或点击时,这个回调函数会被触发。这对于交互式应用非常有用,比如图像标注、特征点选取等。

函数原型


void cv::setMouseCallback	
(
	const String & 	winname,
	MouseCallback 	onMouse,
	void * 	userdata = 0 
)		

参数

  • 参数winname 窗口的名称。
  • 参数onMouse 鼠标事件的回调函数。参见 OpenCV 样例了解如何指定和使用回调。
  • 参数userdata 传递给回调的可选参数。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

// 鼠标回调函数
void onMouse( int event, int x, int y, int flags, void* userData )
{
    // 用户数据
    int* data = static_cast< int* >( userData );

    switch ( event )
    {
    case EVENT_LBUTTONDOWN:
        cout << "Left button of the mouse was clicked - position (" << x << ", " << y << ")" << endl;
        *data += 1;  // 更新用户数据
        break;
    case EVENT_RBUTTONDOWN:
        cout << "Right button of the mouse was clicked - position (" << x << ", " << y << ")" << endl;
        *data -= 1;  // 更新用户数据
        break;
    default:
        break;
    }
}

int main()
{
    Mat img = Mat::zeros( 640, 480, CV_8UC3 );
    namedWindow( "Test Window", WINDOW_AUTOSIZE );
    imshow( "Test Window", img );

    // 初始化用户数据
    int count = 0;

    // 设置鼠标回调函数,并传递用户数据
    setMouseCallback( "Test Window", onMouse, &count );

    // 等待按键
    waitKey( 0 );

    // 输出用户数据的最终值
    cout << "Final value of count: " << count << endl;

    return 0;
}

运行结果

鼠标左右键随意点击窗口中的任意位置,终端输出点击的位置坐标
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893814.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自监督学习:引领机器学习的新革命

引言 自监督学习&#xff08;Self-Supervised Learning&#xff09;近年来在机器学习领域取得了显著进展&#xff0c;成为人工智能研究的热门话题。不同于传统的监督学习和无监督学习&#xff0c;自监督学习通过利用未标注数据生成标签&#xff0c;从而大幅降低对人工标注数据…

champ模型部署指南

一、介绍 champ是由阿里巴巴、复旦大学和南京大学的研究人员共同提出的一种基于3D的将人物图片转换为视频动画的模型&#xff0c;该方法结合了3D参数化模型(特别是SMPL模型)和潜在扩散模型&#xff0c;能够精确地捕捉和再现人体的3D形状和动态&#xff0c;同时保持动画的时间一…

用SVM做时间序列预测真绝!最新思路无敌了,卷不动的进来看!

时间序列预测算法如今也算是百花齐放了&#xff0c;不过最近大家都在卷爆火的Transformer-based&#xff0c;卷不动的盆友其实也可以考虑从传统方法下手找创新&#xff0c;比如用SVM做时间序列预测。 SVM是一种经典的机器学习算法&#xff0c;在处理非线性及高维模式识别方面很…

k8s中的微服务

一、什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f;需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service&#xff0c;应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…

黑马程序员-redis项目实践笔记2

目录 三、 Redis实现全局唯一ID 实现优惠卷秒杀下单 超卖问题 一人一单&#xff08;单例项目线程安全问题&#xff09; 一人一单&#xff08;集群环境下的并发问题&#xff09; 分布式锁的基本原理和实现方式对比 Redis分布式锁 实现核心思路 实现代码 Redis分布式锁…

供应商管理是什么?

你是一家制造业的老板&#xff0c;在需求旺盛的时段&#xff0c;却找不到一家合适的供应商&#xff0c;出现供应商突然退出合作&#xff1b;杀熟&#xff0c;供应的产品质量不过关等情况&#xff0c;企业的利益空间瞬间被压榨&#xff0c;急需一套管理系统来帮助选择供应商&…

《七度荒域:混沌之树》风灵月影二十二项游戏辅助:上帝模式/无限HP和EP/金币不减

《七度荒域:混沌之树》是款国产Roguelike银河恶魔城横版动作游戏&#xff0c;融合刷宝玩法。玩家将扮演修补世界的命运之子&#xff0c;探寻碎裂世界的秘密&#xff0c;在战斗轮回中成长&#xff0c;挑战未知与隐秘力量。风灵月影版修改器提供更多自定义和游戏体验调整选项&…

关于MyBatis的一些面试题

mybatis的执行流程 MyBatis 的执行流程主要包括 SQL 解析、参数绑定、执行查询/更新、结果映射等几个步骤。下面详细解释每个步骤的执行流程&#xff1a; 1. 加载配置文件和映射文件 加载 MyBatis 配置文件&#xff1a;启动时&#xff0c;MyBatis 通过 SqlSessionFactoryBui…

Transformer图解以及相关的概念

前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架&#xff0c;同时大部分LLM也是使用其进行训练生成模型&#xff0c;所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面…

2018年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;TCP/IP体系结构应用层常用协议及其相应的运输层协议 TCP协议是面向连接可靠数据传输服务&#xff0c;UDP无连接不可靠的数据传输服务&#xff0c;IP无连接不可靠的数据连接服务。 FTP协议&#xff0c;SMTP协议和HTTP协议使用TCP协议提供的面…

SaaS架构:中央库存系统架构设计

大家好&#xff0c;我是汤师爷~ 近年来&#xff0c;越来越多的零售企业大力发展全渠道业务。在销售额增长上&#xff0c;通过线上的小程序、直播、平台渠道等方式&#xff0c;拓展流量变现渠道。在会员增长方面&#xff0c;通过多样的互动方式&#xff0c;全渠道触达消费者&am…

Power BI - 设置Waterfall Chart第一个Pillar的颜色

1.简单介绍 有的用户可能会单独设置Column Chart&#xff08;条形图&#xff09;的第一个柱子的颜色&#xff0c;如下图所示&#xff0c; 这种其实可以通过Column Chart的Conditional formating进行设置&#xff0c; - SWICH SELECTEDVALUE 或者也可以直接对单独的Column进行…

深入拆解TomcatJetty(一)

深入拆解Tomcat&Jetty&#xff08;一&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1、Web容器是什么 早期的 Web 应用主要用于浏览新闻等静态页面&#xff0c;HTTP 服务器&#xff08;比如 Apache、Nginx&#xff09;向浏览器返…

Google play开发者账号被封,申诉就有机会,别不信

在谷歌上架&#xff0c;开发者账号被封对很多开发者来说已经是家常便饭了&#xff0c;虽说一直都有在流传申诉没有用。别灰心啊&#xff0c;申诉就有机会&#xff0c;不少开发者都申诉成功了。 尤其是用一个少一个、价值好几个w的老号&#xff0c;不申诉就认栽实在是太亏了&…

【黑马点评优化】之使用Caffeine+Redis实现应用级二层缓存

【黑马点评优化】之使用CaffeineRedis实现应用级二层缓存 1 缓存雪崩定义及解决方案2 为什么要使用多级缓存3 RedisCaffeine实现应用层二级缓存原理4 利用CaffeineRedis解决Redis突然宕机导致的缓存雪崩问题4.1 pom.xml文件引入相关依赖4.2 本地缓存配置类4.3 修改ShopServiceI…

大有期货携手云轴科技ZStack 获“鼎新杯”数字化转型典型案例二等奖

近日&#xff0c;由中国通信标准化协会主办、中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;承办、中国通信企业协会支持的“2024数字化转型发展大会”在北京召开。本届大会以“拥抱数智化无限可能”为主题&#xff0c;会上公布了第三届“鼎新杯”数字化转型应…

Centos 7.9NFS搭建

原创作者&#xff1a;运维工程师 谢晋 Centos 7.9NFS搭建 NFS服务端安装客户机访问共享配置 NFS服务端安装 SSH连接系统登录到服务端安装nfs服务 # yum -y install nfs-utils2. 安装完成后&#xff0c;查看需要共享的目录&#xff0c;这边共享的是/home目录&#xff0c;如…

Selenium - 用这个力量做任何你想做的事情

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…

苹果正式宣布:iPhone全面开放近场通信(Near Field Communication,简称NFC)【使用安全元件提供app内NFC数据交换功能】

文章目录 引言I iPhone的NFC功能开发者用户数据交换的体验革新安全与隐私II 知识扩展:近场通信(NFC)技术钱包NFC开关打开读取NFC标签(NFC tags )权限demo引言 2014年iPhone 6开始,苹果首次引入了NFC功能,但最初只允许自家的Apple Pay进行移动支付。慢慢地适配了交通卡,增…

RAG拉满-上下文embedding与大模型cache

无论怎么选择RAG的切分方案&#xff0c;仍然切分不准确。 最近&#xff0c;anthropics给出了补充上下文的embedding的方案&#xff0c;RAG有了新的进展和突破。 从最基础的向量查询&#xff0c;到上下文embedding&#xff0c;再到rerank的测试准确度都有了明显的改善&#xf…