我使用imshow
创建了许多窗口,我使用cvSetMouseCallback
函数来获取鼠标位置和当前按下的按钮。
但我无法理解事件来自哪个窗口?我怎么知道什么窗口会产生什么事件?
答案 0 :(得分:2)
您可以使用param
函数上的cvSetMouseCallback
参数将用户定义的参数传递给鼠标回调。然后,在您的回调中,您可以读取该参数以确定鼠标事件来自哪个窗口。
以下是cvSetMouseCallback
函数的定义:
void cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, void* param=NULL )
您可以使用第三个参数将指针传递给您喜欢的任何内容(例如,窗口的名称)。这是一个例子:
#include "opencv/cv.h"
#include "opencv/highgui.h"
using namespace std;
using namespace cv;
void on_mouse(int event, int x, int y, int flags, void* param)
{
if (event == EVENT_LBUTTONDOWN)
{
const char* winname = (const char*)param;
cout << "Mouse button down on window " << winname << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
cvNamedWindow("win1");
cvNamedWindow("win2");
cvSetMouseCallback("win1", on_mouse, "win1");
cvSetMouseCallback("win2", on_mouse, "win2");
cvWaitKey(0);
return 0;
}
当您单击两个窗口中的任何一个时,此应用程序将在控制台中编写窗口名称。这是它的样子: