我遇到OpenCV问题。我已尝试过其他问题的实施,但问题仍然存在。我有一个名为 MainWindow 的课程,在该课程的某个时刻,它会创建一个名为“已整理”的 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
}
答案 0 :(得分:1)
使用我之前关于此主题的帖子作为参考:
我能够组装一个快速的C ++ / Qt / OpenCV演示,创建一个OpenCV窗口,并在每次按下鼠标左键时在控制台上写一条消息。
我相信代码是不言自明的:
<强> main.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()
定义为MainWindow
的静态成员并实施它。
如果您这样做,您的代码将类似于:
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);
}