gpt4 book ai didi

c++ - MouseCallback 函数 OpenCV

转载 作者:行者123 更新时间:2023-11-28 07:47:23 24 4
gpt4 key购买 nike

我对 OpenCV 有疑问。我已经尝试了其他问题的实现,但问题仍然存在。我有一个名为 MainWindow 的类,在该类中的某个时刻,它创建了一个名为“rectified”的 NamedWindow。在我的主要功能中,我试图添加一个监听器来捕获该 cvNamedWindow 实例上的点击事件。问题是 on_mouse 函数没有响应。这是我的主要方法:

static void on_mouse( int event, int x, int y, int flags, void *param)
{
qDebug("hjhv00");
MainWindow * mw=(MainWindow*)param;
if(mw->getMyVision()->getCalibrationDone())
{
if(event==CV_EVENT_LBUTTONDOWN){
qDebug("%d<---->%d",x,y);
}
}
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
int mouseParam=5;

w.show();
cvSetMouseCallback("rectified",on_mouse,&w);

return a.exec();
// test svn
// test from google
}

最佳答案

使用我之前关于此主题的帖子作为引用:

我能够组装一个快速的 C++/Qt/OpenCV 演示,它创建一个 OpenCV 窗口,并在每次按下鼠标左键时在控制台上写入一条消息。

我相信代码是不言自明的:

ma​​in.cpp:

#include <cv.h>
#include <highgui.h>

#include <iostream>

#include <QtWidgets/QApplication>


void on_mouse(int event, int x, int y, int flags, void* param)
{
if (event == CV_EVENT_LBUTTONDOWN)
{
std::cout << "@ Left mouse button pressed at: " << x << "," << y << std::endl;
}
}


int main(int argc, char* argv[])
{
QApplication app(argc, argv);

IplImage* img = cvLoadImage("/Users/karlphillip/workspace/opencv/qt_mouse/LeafGlyph.jpg");
if (!img)
{
std::cout << "!!! Failed to load image" << std::endl;
return -1;
}

cvNamedWindow("result", CV_WINDOW_AUTOSIZE);

cvSetMouseCallback("result",&on_mouse, 0);

cvShowImage("result", img);
cvWaitKey(0);

return app.exec();
}

project.pro(在 Mac OS X 上使用):

TEMPLATE = app

QT += widgets

## OpenCV settings for Mac OS X
macx {
INCLUDEPATH += /usr/local/include/opencv

LIBS += -L/usr/local/lib/ \
-lopencv_core \
-lopencv_highgui \
-lopencv_imgproc
}

SOURCES += \
main.cpp

关于您的实现的说明:

我建议您将对 cvSetMouseCallback() 的调用移动到您调用 cvNamedWindow() 的任何地方。我怀疑正确的位置是在 MainWindow 的构造函数中,它应该创建窗口,对吧?!然后,您还必须将 on_mouse() 定义为 MainWindowstatic 成员并实现它。

如果您这样做,您的代码将类似于:

void MainWindow::on_mouse(int event, int x, int y, int flags, void* param)
{
if (event == CV_EVENT_LBUTTONDOWN)
{
std::cout << "@ Left mouse button pressed at: " << x << "," << y << std::endl;
}
}

MainWindow::MainWindow()
{
IplImage* img = cvLoadImage("/Users/karlphillip/workspace/opencv/qt_mouse/LeafGlyph.jpg");
if (!img)
{
std::cout << "!!! Failed to load image" << std::endl;
return;
}

cvNamedWindow("result", CV_WINDOW_AUTOSIZE);

cvSetMouseCallback("result",&on_mouse, 0);

cvShowImage("result", img);
cvWaitKey(0);
}

关于c++ - MouseCallback 函数 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com