cvSetMouseCallback - 事件来自哪个窗口?

时间:2014-04-07 21:13:23

标签: c++ opencv

我使用imshow创建了许多窗口,我使用cvSetMouseCallback函数来获取鼠标位置和当前按下的按钮。

但我无法理解事件来自哪个窗口?我怎么知道什么窗口会产生什么事件?

1 个答案:

答案 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;
}

当您单击两个窗口中的任何一个时,此应用程序将在控制台中编写窗口名称。这是它的样子:

Sample output