Pages

2009年11月5日 星期四

不同版本之滑鼠事件設定

OpenCV 在一兩個月前發布最新的 v2.0,對我而言,最大的差異就是「function prototype」,數量可說是不勝枚舉,但我們僅需了解其不同之處,修改應該不成問題,設定滑鼠事件就是一例。

滑鼠事件不外乎就是「左右鍵按下、放開」、「滑鼠移動」,不過這些都是簡單卻很重要的工具,例如:我們可以
  1. 框出指定區域作物體追蹤。
  2. 框出指定區域作直方圖統計。
  3. 框出指定區域作影像擷取。
甚至這個方框可以動態讓使用者作調整,所以他的確是很重要的東西。恩!底下就針對差異點說明:

Set mouse callback function
  • OpenCV b3.1
cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse);
  • OpenCV 2.0
cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, void* param CV_DEFAULT(NULL));

Mouse callback function prototype

  • OpenCV b3.1
void MouseCallback(int event, int x, int y, int flags);
  • OpenCV 2.0
void MouseCallback(int event, int x, int y, int flags, void *param);
很明顯地,新版多了一個參數「void* param」,這樣一來,就可以傳入一個結構,來記錄滑鼠座標,毋須定義全域變數。另外,還有一個外表看不出來的差異,就是舊版(b3.1)取得的滑鼠座標需要上下顛倒,但新版不用,詳細可以看原始碼。

Source Code Download

2 則留言:

Bee 提到...

我用v1.1pre1a。大部分函式和v2.0比較像。

Eric 提到...

使用方式:

char *winName = "Show Image";
cvNamedWindow(winName, 1);
cvShowImage(winName, m_Frame);

CvRect region;
GetRegion(m_Frame, &region, winName);

...

 
Blogger Templates