2014-04-07 19 views

回答

2

您可以使用cvSetMouseCallback函數中的param參數將用戶定義的參數傳遞給您的鼠標回調。然後,在您的回調中,您可以讀取該參數以確定鼠標事件來自哪個窗口。

這裏是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

+0

非常感謝你Ove。我像你說的那樣解決了這個問題 – user3508563

+0

如果這個答案適合你,你應該把它標記爲接受的答案。 [閱讀這篇文章,看看你爲什麼應該這樣做](http://meta.stackexchange.com/a/5235)。 – Ove