获取鼠标动作进行相应处理
int main(){
cv::imshow("EnvFusion", img); //这里显示一个窗口
/*<!-- 在窗口上进行鼠标操作就使用 cv::setMouseCallback()-->
<!-- 可进行的操作有 滑轮滚动,左键按下,右键按下,鼠标移动,
还可以组合,比如鼠标左键按下并且鼠标移动,就是鼠标在窗口中拖动 -->
<!-- 该函数也会获取鼠标点击的x,y -->*/
cv::setMouseCallback("EnvFusion", OnMouseAction);
}
// <!-- 鼠标操作回调函数 -->
void OnMouseAction(int event, int x, int y, int flags, void *ustc) {
double value;
float step = 0.02;
switch (event) {
case CV_EVENT_MOUSEWHEEL:
value = cv::getMouseWheelDelta(flags);
if (value > 0)
map_scale = map_scale * 0.9;
else if (value < 0)
map_scale = map_scale * 1.1;
if (map_scale > 20) map_scale = 20;
if (map_scale < 0.05) map_scale = 0.05;
break;
case CV_EVENT_LBUTTONDOWN:
MousePress(x, y);
map_down = true;
prept = cv::Point(x, y);
break;
case CV_EVENT_LBUTTONUP:
map_down = false;
break;
default:
break;
}
if (map_down == true && event == CV_EVENT_MOUSEMOVE) //左键按下且鼠标移动
{
cv::Point curpt = cv::Point(x, y);
cv::Point dpoint0 = curpt - prept;
dpoint += dpoint0;
prept = curpt;
} else {
dpoint = cv::Point(0, 0);
}
}
void MousePress(int x, int y) {
<!-- 这里的x,y是传进来的鼠标点击位置的坐标 -->
<!-- 一般是用来判断鼠标点击的坐标(x,y)是不是在某个范围内,是的话就进行某种操作 -->
}