今天在开发opencv项目的时候,需求是:视频实时播放,鼠标点击某处,新窗口放大播放局部视频。
这里遇到的问题是:需要用opencv获取鼠标。
背景:opencv有自带的鼠标回调函数,而且它的on_Mouse()函数是封装好的,有五个形参,其中就有鼠标的位置x和y在形参中。
可是 on_Mouse()函数是void型,没有返回值。
问题转化为:我需要用on_Mouse()函数有的鼠标位置,传到另一个函数(要使用的地方)。
解决办法是:定义两个全局变量,在on_Mouse()函数内部传出来。
int X, Y;//鼠标坐标全局变量
下面是opencv自带的配合鼠标函数的函数on_Mouse()。需要的就是两个形参
void on_Mouse(int event, int x, int y, int flag, void*ustc) {
//形参x,y是鼠标点击的位置
//需要鼠标的位置
if (event == CV_EVENT_LBUTTONDOWN)
{
cout << "下面进行鼠标位置的获取" << endl;
cout << "鼠标坐标为:" << x << "和" << y << endl;
X = x;//把局部变量传出来变成全局变量
Y = y;
}
}
在主函数中使用鼠标回调函数
setMouseCallback("src1", on_Mouse, 0);//调用鼠标回调函数
//这里的窗口名称是src1
记录一下自己踩得坑。怎么把局部变量传出来。或者传出来了,用的时候用错了。