如何使用opencv检测实时feed中的鼠标点击
How to detect mouse clicks in a live feed using opencv
我是Opencv的新用户,我正在调试一个简单的程序,该程序会在摄像机的直播流上使用setMouseCallback函数来计算鼠标点击的数量和位置,但是一旦程序开始,它就会被击中,并且由于鼠标的移动而不是点击而更新鼠标点击的位置和数量。我把我的程序包括在下面,如果有人指出错误并给我一个解决方案,我将不胜感激。
#include "opencv2highgui.hpp"
#include "opencv2core.hpp"
#include "opencv2imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
#define window "LiveFeed"
Mat frame;
void cbmouse(int event, int x, int y, int flags, void*userdata)
{
static int count = 0;
char text[] = "count999";
if (event = EVENT_LBUTTONDOWN)
{
while (1)
{
circle(frame, Point(x, y), 4, Scalar(0, 0, 255), 2);
count++;
sprintf(text, "count%d", count);
putText(frame, text, Point(x + 5, y + 2), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 0), 2);
imshow(window, frame);
if (waitKey(33) == 27)
break;
}
}
return;
}
int main(int argc, char*argv[])
{
VideoCapture video(0);
namedWindow(window);
while (1)
{
video >> frame;
imshow(window, frame);
setMouseCallback(window, cbmouse, NULL);
if (waitKey(33) == 27)
break;
}
}
也许你只需要更正if (event == EVENT_LBUTTONDOWN)
但是我做了一些改进。请尝试下面的代码。(我不确定,你想冻结实时饲料当你点击第一次?)
#include "opencv2highgui.hpp"
#include "opencv2core.hpp"
#include "opencv2imgproc.hpp"
using namespace cv;
using namespace std;
#define window "LiveFeed"
Mat frame;
vector<Point> pts;
void drawClickedPoints( Mat img )
{
for(size_t i = 0; i < pts.size(); i++)
{
circle(img, pts[i], 4, Scalar(0, 0, 255), 2);
putText(frame, format("count%d", i), Point(pts[i].x + 5, pts[i].y + 2), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 0), 2);
}
}
void cbmouse(int event, int x, int y, int flags, void*userdata)
{
if (event == EVENT_LBUTTONDOWN)
{
pts.push_back(Point(x,y));
}
}
int main(int argc, char*argv[])
{
VideoCapture video(0);
namedWindow(window);
setMouseCallback(window, cbmouse, NULL);
while (1)
{
video >> frame;
drawClickedPoints(frame);
imshow(window, frame);
if (waitKey(33) == 27)
break;
}
}
相关文章:
- WinAPI挂钩鼠标
- 将鼠标悬停在问题上时与预期">"相关的代码错误
- 跟踪滚动条上的鼠标事件
- SendInput()鼠标移动计算
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何在鼠标挂钩过程中检测拖动
- Win32 发送输入鼠标移动滞后并冻结
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- 在 macOS 中使用 C/C++ 设置鼠标光标图像
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在QSplashScreen中禁用鼠标单击
- 如何使用 boost beast websocket 客户端收听 websocket feed?
- C++鼠标单击时的屏幕截图不起作用
- 如何将鼠标坐标转换为"mm"
- 标签检测鼠标单击 c++
- 使用 SFML 在矩形的矢量中查找鼠标单击量
- 在 OpenGL 中使用透视与正交投影时的光线投射(鼠标拾取)
- 如何使用鼠标单击选择多个 QLabel 对象?