Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cvSetMouseCallback-事件来自哪个窗口?_C++_Opencv - Fatal编程技术网

C++ cvSetMouseCallback-事件来自哪个窗口?

C++ cvSetMouseCallback-事件来自哪个窗口?,c++,opencv,C++,Opencv,我使用imshow创建了许多窗口,并使用cvSetMouseCallback功能获取鼠标位置和当前按下的按钮 但我不明白事件来自哪个窗口?如何知道哪个窗口生成什么事件?您可以使用cvSetMouseCallback函数上的param参数将用户定义的参数传递给鼠标回调。然后,在回调中,您可以读取该参数以确定鼠标事件来自哪个窗口 以下是函数的定义: void cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, v

我使用
imshow
创建了许多窗口,并使用
cvSetMouseCallback
功能获取鼠标位置和当前按下的按钮


但我不明白事件来自哪个窗口?如何知道哪个窗口生成什么事件?

您可以使用
cvSetMouseCallback
函数上的
param
参数将用户定义的参数传递给鼠标回调。然后,在回调中,您可以读取该参数以确定鼠标事件来自哪个窗口

以下是函数的定义:

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;
}
#包括“opencv/cv.h”
#包括“opencv/highgui.h”
使用名称空间std;
使用名称空间cv;
鼠标上的void(int事件、int x、int y、int标志、void*param)
{
if(event==event_LBUTTONDOWN)
{
常量字符*winname=(常量字符*)参数;

非常感谢你。我按照你说的解决了这个问题。如果这个答案对你有效,你应该把它标记为已接受的答案。