1. 程式人生 > >opencv 滑鼠響應機制 onMouse()函式的理解

opencv 滑鼠響應機制 onMouse()函式的理解

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:這一行
就確定了已經選好的矩形