この主題に関する私の以前の投稿を参照として使用します:
OpenCVウィンドウを作成し、マウスの左ボタンが押されるたびにコンソールにメッセージを書き込む、簡単なC ++ / Qt/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);
}