在 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");
}
我正在尝试打开网络摄像头视频,然后在第一次点击时暂停它,然后在触摸屏显示器上第二次点击时关闭它。我正在使用 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");
}