Обнаружение касания в окне OpenCV C ++ - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь открыть видео с веб-камеры, затем приостановить его при первом касании, а затем закрыть при втором касании на сенсорном дисплее. Я использую OpenCV версии 3.4.0.

В настоящее время я могу сделать это, нажав клавишу q или , закрыв окно , но я не могу сделать это касанием экрана. Вот мой пример кода:

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 ++.

1 Ответ

1 голос
/ 17 января 2020

Если вы хотите закрыть окно imshow с помощью мыши, вы можете просто использовать setMouseCallback . Вот мой подход: вы можете закрыть свое окно по ключевому слову "q" или просто нажав на окно:

#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");
}
...