opencv 滑鼠響應機制 onMouse()函式的理解
阿新 • • 發佈:2019-02-12
void onMouse(int event, int x, int y, int, void*) { if (selectObject)//只有當滑鼠左鍵按下去時才有效,然後通過if裡面程式碼就可以確定所選擇的矩形區域selection了 { selection.x = MIN(x, origin.x);//矩形左上角頂點座標 selection.y = MIN(y, origin.y); selection.width = std::abs(x - origin.x);//矩形寬 selection.height = std::abs(y - origin.y);//矩形高 selection &= Rect(0, 0, image.cols, image.rows);//用於確保所選的矩形區域在圖片範圍內 } switch (event) { case CV_EVENT_LBUTTONDOWN: origin = Point(x, y); selection = Rect(x, y, 0, 0);//滑鼠剛按下去時初始化了一個矩形區域 selectObject = true; break; case CV_EVENT_LBUTTONUP: selectObject = false; if (selection.width > 0 && selection.height > 0) trackObject = -1; break; } }
滑鼠按下去是一個事件,傳到這個函式裡面,觸發
case CV_EVENT_LBUTTONDOWN: 這一行
然後滑鼠在移動觸發<span style="font-family: Arial, Helvetica, sans-serif;">if (selectObject) 這一行</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#ff0000;">這時候新的座標點的x,y值都會傳過來,不</span>管是從哪個方向往哪個方向畫都可以得到矩形(因為他是取絕對值的,從左下往。。。,等等等都行)</span>
<span style="font-family: Arial, Helvetica, sans-serif;">最後</span>
<span style="font-family:Arial, Helvetica, sans-serif;">左鍵滑鼠擡起這個事件 傳到函式裡觸發</span><pre name="code" class="html">case CV_EVENT_LBUTTONUP:這一行
就確定了已經選好的矩形