Opencv获取鼠标坐标值(三种方式均可以)

上传者: zhuixun521 | 上传时间: 2019-12-21 22:22:04 | 文件大小: 4.78MB | 文件类型: rar
在OpenCV库中,获取鼠标坐标值是进行交互式图像处理的一个重要功能。这使得用户能够在运行时选择图像上的特定区域或进行其他形式的交互。本文将详细解释三种不同的方法来实现这一目标,并且这些方法都在VS2013环境下成功运行。下面,我们将逐一介绍这些方法,并提供必要的代码示例。 ### 方法一:使用cv::setMouseCallback OpenCV提供了`cv::setMouseCallback`函数,它可以将一个回调函数与指定窗口关联,以便在鼠标事件发生时调用该函数。以下是一个简单的例子: ```cpp #include #include using namespace cv; using namespace std; int x, y; int flag = 0; void mouse_callback(int event, int x_, int y_, int flags, void* param) { if (event == CV_EVENT_LBUTTONDOWN) { x = x_; y = y_; flag = 1; cout << "鼠标左键按下,坐标:" << x << "," << y << endl; } } int main() { Mat img = imread("image.jpg"); namedWindow("Image", WINDOW_NORMAL); setMouseCallback("Image", mouse_callback, NULL); while (true) { imshow("Image", img); if (waitKey(1) >= 0) break; } return 0; } ``` 在这个例子中,我们创建了一个名为`mouse_callback`的函数,当鼠标左键被按下时,它会被调用并更新变量`x`和`y`的值。 ### 方法二:结合高GUI库(如Qt) 如果你的项目已经使用了如Qt这样的图形用户界面库,你可以利用其提供的事件处理机制来获取鼠标坐标。以下是一个简化的Qt与OpenCV结合的例子: ```cpp #include #include #include #include class MouseWindow : public QWidget { Q_OBJECT public: MouseWindow(QWidget *parent = nullptr) : QWidget(parent) { setWindowTitle("Image"); } protected: void paintEvent(QPaintEvent *) { QPainter painter(this); QImage img("image.jpg"); painter.drawImage(rect(), img); } private slots: void mousePressEvent(QMouseEvent *event) { int x = event->x(); int y = event->y(); qDebug() << "鼠标左键按下,坐标:" << x << "," << y; } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MouseWindow window; window.show(); return app.exec(); } ``` 在这个例子中,我们创建了一个自定义的`QWidget`,并在`mousePressEvent`槽函数中获取鼠标坐标。 ### 方法三:使用OpenCV的事件系统 OpenCV有自己的事件系统,虽然不常用,但也可以用来获取鼠标事件。你需要创建一个`cv::EventInfo`对象,然后通过`cv::waitKeyEx`函数处理事件。这种方法相对较复杂,一般不推荐使用,但在这里也提供一个简化的示例: ```cpp #include #include using namespace cv; using namespace std; int x, y; bool has_event = false; EventInfo get_mouse_event() { EventInfo info; while (!has_event) { int keycode = waitKeyEx(-1); if (keycode != -1) { if (keycode & 0xFF == 27) { // 按下ESC键退出 exit(0); } else if (keycode & 0xFF == 'm') { has_event = true; info.event = EVENT_MOUSEBUTTONDOWN; } } } return info; } int main() { Mat img = imread("image.jpg"); namedWindow("Image", WINDOW_NORMAL); EventInfo info = get_mouse_event(); if (info.event == EVENT_MOUSEBUTTONDOWN) { Point pt(info.x, info.y); x = pt.x; y = pt.y; cout << "鼠标左键按下,坐标:" << x << "," << y << endl; } return 0; } ``` 在这个例子中,我们通过`cv::waitKeyEx`来监听键盘和鼠标事件,当鼠标按钮被按下时,我们提取坐标信息。 总结,OpenCV提供了多种方式来获取鼠标坐标,包括`cv::setMouseCallback`、结合高GUI库以及OpenCV的事件系统。在实际应用中,根据项目的具体需求和所使用的库,可以选择最合适的实现方式。在VS2013环境下,以上方法都经过验证,可以直接使用。通过理解并运用这些方法,开发者可以为OpenCV应用程序增加更多交互性,提升用户体验。

文件下载

资源详情

[{"title":"( 31 个子文件 4.78MB ) Opencv获取鼠标坐标值(三种方式均可以)","children":[{"title":"Opencv_Mouse_ZuoBiao","children":[{"title":"ipch","children":[{"title":"opencv_mouse_zuobiao-a199e5bd","children":[{"title":"opencv_mouse_zuobiao-c2193017.ipch <span style='color:#111;'> 2.81MB </span>","children":null,"spread":false}],"spread":true}],"spread":true},{"title":"Opencv_Mouse_ZuoBiao.sln <span style='color:#111;'> 1006B </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.v12.suo <span style='color:#111;'> 24.50KB </span>","children":null,"spread":false},{"title":"Debug","children":[{"title":"Opencv_Mouse_ZuoBiao.exe <span style='color:#111;'> 117.00KB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.ilk <span style='color:#111;'> 905.49KB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.pdb <span style='color:#111;'> 2.30MB </span>","children":null,"spread":false}],"spread":true},{"title":"Opencv_Mouse_ZuoBiao.sdf <span style='color:#111;'> 16.25MB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao","children":[{"title":"ReadMe.txt <span style='color:#111;'> 1.56KB </span>","children":null,"spread":false},{"title":"sample.txt <span style='color:#111;'> 71B </span>","children":null,"spread":false},{"title":"ZuoBiaosample.txt <span style='color:#111;'> 83B </span>","children":null,"spread":false},{"title":"stdafx.h <span style='color:#111;'> 234B </span>","children":null,"spread":false},{"title":"a0.jpg <span style='color:#111;'> 65.43KB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.vcxproj <span style='color:#111;'> 5.39KB </span>","children":null,"spread":false},{"title":"Debug","children":[{"title":"vc120.pdb <span style='color:#111;'> 1.33MB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.obj <span style='color:#111;'> 470.58KB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.pch <span style='color:#111;'> 1.63MB </span>","children":null,"spread":false},{"title":"vc120.idb <span style='color:#111;'> 779.00KB </span>","children":null,"spread":false},{"title":"stdafx.obj <span style='color:#111;'> 11.72KB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.log <span style='color:#111;'> 2.32KB </span>","children":null,"spread":false},{"title":"Opencv_M.C4AE27D2.tlog","children":[{"title":"CL.write.1.tlog <span style='color:#111;'> 1.53KB </span>","children":null,"spread":false},{"title":"link.command.1.tlog <span style='color:#111;'> 2.38KB </span>","children":null,"spread":false},{"title":"CL.read.1.tlog <span style='color:#111;'> 18.10KB </span>","children":null,"spread":false},{"title":"link.write.1.tlog <span style='color:#111;'> 828B </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.lastbuildstate <span style='color:#111;'> 194B </span>","children":null,"spread":false},{"title":"cl.command.1.tlog <span style='color:#111;'> 2.55KB </span>","children":null,"spread":false},{"title":"link.read.1.tlog <span style='color:#111;'> 4.54KB </span>","children":null,"spread":false}],"spread":false}],"spread":true},{"title":"stdafx.cpp <span style='color:#111;'> 226B </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.cpp <span style='color:#111;'> 10.02KB </span>","children":null,"spread":false},{"title":"Opencv_Mouse_ZuoBiao.vcxproj.filters <span style='color:#111;'> 1.30KB </span>","children":null,"spread":false},{"title":"targetver.h <span style='color:#111;'> 236B </span>","children":null,"spread":false},{"title":"ZuoBiao_sample.txt <span style='color:#111;'> 25B </span>","children":null,"spread":false}],"spread":false}],"spread":true}],"spread":true}]

评论信息

  • qq_34106457 :
    不错,可以使用
    2020-06-07
  • Seehidre :
    很好用,总结的不错
    2019-03-08
  • quji8755 :
    超级好用,很棒
    2017-05-18

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明