(一)、什么是鼠标回调事件以及作用?
简单的理解:鼠标回调时间就是我们在编译窗口中,我们的鼠标是可以运转的
并且会返回我们鼠标移动的二维坐标.
(二)、我们需要认识那些API?
1.回调函数:
声明在类外的函数、其基本格式为:
void mouse_callback(int event, int x, int y, int flag, void* userdata) //回调函数
{
cout << event << " " << x << " " << y << " " << flag << " "<< endl; //打印函数.
}
构造函数参数格式为:
event:(本文按照基础走。也即数字)鼠标事件
0=滑动;
1=左键点击;2=右键点击;3=中建点击;
4=左键放开;5=右键放开;6=右键放开;
7=左键双击;8=右键双击;9=中建双击;
x和y:鼠标指针在图像坐标系的坐标
flags鼠标的组合键显示:
usderata: 用户自定义参数:
2.设置鼠标回调函数:
其名称为固定的名称:SetMouseCallback(窗口名字,回调函数名字,usdedata)
主要目的:是响应窗口.
setMouseCallback("鼠标事件", mouse_callback); //设置鼠标回调函数
(三)操作思想与基本思路:
首先我们要设置回到函数mousecallback;然后进行窗口打印输出鼠标的各项操作.然后在主函数中读入图像,设置窗口,进行设置鼠标回调函数,显示帧数、最后销毁窗口.
(四)、实战项目:
1.代码展示:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void mouse_callback(int event, int x, int y, int flag, void* userdata) //回调函数
{
cout << event << " " << x << " " << y << " " << flag << " "<< endl; //打印函数.
}
int main()
{
Mat imag;
imag = imread("xx.jpg"); //读入图像
namedWindow("鼠标事件",WINDOW_NORMAL);
setMouseCallback("鼠标事件", mouse_callback); //设置鼠标回调函数
while (1)
{
imshow("鼠标事件", imag); //展示窗口
if (waitKey(25) == 27)break; //展示帧率
}
cout << "程序退出:" << endl;
destroyAllWindows();
return 0;
}
2.效果展示:
鼠标回调事件效果