static void on_Mouse(int event, int x, int y, int flags, void* userdata)
{
int w, h;
Mat m = ((Mat*)userdata)->clone();
// 判断鼠标事件
if (event == EVENT_LBUTTONDOWN) // 鼠标左键按下
{
// 获取鼠标点坐标
startP.x = x;
startP.y = y;
}
else if (event == EVENT_MOUSEMOVE) // 鼠标在移动
{
if (startP.x>0 && startP.y>0) // 起始坐标不为负值时进行操作
{
//获取鼠标坐标
endP.x = x;
endP.y = y;
w = endP.x - startP.x;
h = endP.y - startP.y;
}
}
}
void CV120201012Dlg::mouseDraw_Demo()
{
Mat img = Mat::zeros(Size(200,200),CV_8UC1);
if (img.empty())
{
MessageBox(_T("图像加载失败!"), _T("error"));
return;
}
// 创建一个窗口
namedWindow("鼠标绘制", WINDOW_AUTOSIZE);
// 调用鼠标响应事件函数
setMouseCallback("鼠标绘制",on_Mouse,(void*)(&img));
}
遇到俩个问题:
1、在 mouseDraw_Demo 函数中,创建了一幅图像 img 作为参数传递给响应函数,
但是在 on_Mouse 中执行到 Mat m = ((Mat*)userdata)->clone(); 就抛异常。
2、在 on_Mouse 判断了 三个鼠标事件,左键按下,抬起,鼠标移动,但是,一旦鼠标发生了移动就会相响应,无法触发左键按下的事件。
请教各位大佬~~~求解答