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

news/2024/10/20 16:58:37/
  • 操作系统: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;
}

运行结果

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


http://www.ppmy.cn/news/1540571.html

相关文章

【论文解读系列】EdgeNAT: 高效边缘检测的 Transformer

代码&#xff1a; https://github.com/jhjie/edgenat 论文&#xff1a; https://arxiv.org/abs/2408.10527v1 论文 EdgeNAT: Transformer for Efficient Edge Detection 介绍了一种名为EdgeNAT的基于Transformer的边缘检测方法。 1. 背景与动机 EdgeNAT预测结果示例。(a, b)…

2.Node.js 缓冲器(Buffer)

二、常用模块 2.1Buffer(缓冲器) 2.1.1概念 Buffer是一个类似于数组的对象&#xff0c;用于表示固定长度的字节序列 Buffer本质是一段内存空间&#xff0c;专门用来处理二进制数据 2.2.2特点 Buffer大小固定无法调整&#xff1b; Buffer性能较好&#xff0c;可以直接操…

公共字段自动填充-MyBatis-Plus

由于使用了MyBatis-Plus提供的方法操作数据库&#xff0c;所有无法直接使用AOP技术来在mapper方法执行前对公共字段赋值。 在 MyBatis-Plus 中&#xff0c;可以通过实现 MyBatis-Plus 提供的 MetaObjectHandler 接口来实现公共字段的自动填充&#xff0c;比如在插入或更新数据…

2024年【汽车驾驶员(技师)】考试题库及汽车驾驶员(技师)试题及解析

随着汽车行业的快速发展&#xff0c;对汽车驾驶员的专业技能要求也越来越高。为了确保每一位驾驶员都能具备扎实的专业技能和安全生产知识&#xff0c;2024年的汽车驾驶员&#xff08;技师&#xff09;考试题库进行了全面更新。安全生产模拟考试一点通作为专业的考试辅导平台&a…

②PROFINET转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 PROFINET 转 Modbus TCP &#xff08;接上一章&#xff09; 配置使用 与 PROFINET 主站进行组态说明 这里介绍与西门子 PLC 的…

docker 基础镜像里 scratch 和alpine,ubuntu centos详细对比(镜像优化)

1. scratch 特点 极简&#xff1a;scratch 是一个空的镜像&#xff0c;没有任何操作系统或文件系统。 体积&#xff1a;scratch 镜像的大小几乎为零&#xff0c;是最小的镜像。 灵活性&#xff1a;完全由用户自定义&#xff0c;没有任何预装的工具或库。 依赖管理&#xff1…

【Linux系统编程】第三十三弹---深入探索进程间通信:原理、方式、及管道技术详解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、进程为什么要通信 2、进程如何通信 3、进程间常见的通信方式 4、管道 4.1、什么是管道 4.2、匿名管道 4.2.1、定义 …

两个数列问题

# 问题描述 给定长度分别为 n 和 m 的两个数列a[n]、b[m]&#xff0c;和一个整数k。求|(a[i] - b[j])^2 - k^2|的最小值。 ## 输入格式 第一行有 2 个整数 n、m、k&#xff0c;分别表示数列 a、b 的长度&#xff0c;以及公式中的整数 k。 第二行有 n 个整数&#xff0c;表示…