2
我使用imshow
創建了很多窗口,我使用cvSetMouseCallback
函數來獲取鼠標位置和當前按下的按鈕。cvSetMouseCallback - 事件來自哪個窗口?
但我無法理解事件來自哪個窗口?我怎麼知道什麼窗口會產生什麼事件?
我使用imshow
創建了很多窗口,我使用cvSetMouseCallback
函數來獲取鼠標位置和當前按下的按鈕。cvSetMouseCallback - 事件來自哪個窗口?
但我無法理解事件來自哪個窗口?我怎麼知道什麼窗口會產生什麼事件?
您可以使用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;
}
此應用程式會當你點擊任何兩個窗口的控制檯寫窗口名稱。下面是它的樣子:
非常感謝你Ove。我像你說的那樣解決了這個問題 – user3508563
如果這個答案適合你,你應該把它標記爲接受的答案。 [閱讀這篇文章,看看你爲什麼應該這樣做](http://meta.stackexchange.com/a/5235)。 – Ove