专注嗑糖一百年 2020-10-27 21:36 采纳率: 0%
浏览 34

opencv的鼠标响应事件setMousecallback

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 判断了 三个鼠标事件,左键按下,抬起,鼠标移动,但是,一旦鼠标发生了移动就会相响应,无法触发左键按下的事件。

请教各位大佬~~~求解答

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:12
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?