- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
为指定的窗口设置鼠标处理器。
setMouseCallback 是 OpenCV 中的一个功能,允许开发者注册一个回调函数来处理鼠标事件。当用户在窗口中移动鼠标或点击时,这个回调函数会被触发。这对于交互式应用非常有用,比如图像标注、特征点选取等。
函数原型
cpp
void cv::setMouseCallback
(
const String & winname,
MouseCallback onMouse,
void * userdata = 0
)
参数
- 参数winname 窗口的名称。
- 参数onMouse 鼠标事件的回调函数。参见 OpenCV 样例了解如何指定和使用回调。
- 参数userdata 传递给回调的可选参数。
代码示例
cpp
#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;
}
运行结果
鼠标左右键随意点击窗口中的任意位置,终端输出点击的位置坐标