在 OpenCV C++ 上检测触摸 window

Detect touch on OpenCV C++ window

我正在尝试打开网络摄像头视频,然后在第一次点击时暂停它,然后在触摸屏显示器上第二次点击时关闭它。我正在使用 OpenCV 版本 3.4.0.

目前我可以通过按 q 键或 关闭 window 来完成,但我无法通过点击屏幕来完成。这是我的代码示例:

bool exit_flag = false;
do
{
    cv::imshow("window", draw_frame);
    int key = cv::waitKey(3);
    if (key == 'q'|| cv::getWindowProperty("window", cv::WND_PROP_ASPECT_RATIO) < 0) 
    { 
        //do_something
        exit_flag = true;
    }
} while (!exit_flag);

cv::waitKey(0);
cv::destroyWindow("window"); 

我尝试使用 cv::EVENT_LBUTTONDOWN 但无法正确使用它来带来任何积极的结果。

如果代码不合适请见谅,我创建了一个示例用于演示,我不是很擅长 C++。

如果您想使用鼠标关闭 imshow window,只需使用 setMouseCallback。这是我的方法:您可以通过 "q" 关键字或简单地单击 window:

来关闭您的 window
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace std;
using namespace cv;

static bool exit_flag = false;


static void mouseHandler(int event,int x,int y, int flags,void* param){
    if(event==1)
    exit_flag = true;
}


int main(int argc, char **argv) {

    Mat draw_frame = imread("/ur/image/directory/photo.jpg");
    do {
    cv::imshow("window", draw_frame);
    int key = cv::waitKey(3);

    setMouseCallback("window",mouseHandler);

    if (key == 'q'|| cv::getWindowProperty("window", cv::WND_PROP_ASPECT_RATIO) < 0)
        {
        //do_something

        exit_flag = true;
        }
    } while (!exit_flag);

    cv::destroyWindow("window");
}