Opencv未能捕获上一次之后的早期点击
Opencv fails to capture click down early after previous
我为OpenCV编写了一个非常简单的UI类(基于OpenCV矩阵上的绘图按钮),但OpenCV似乎有某种事件处理程序错误:
当我向下点击时,如果我点击太快,上下第二次向下点击事件将不会被捕获。然而,如果我点击向下、向上、向下和向上,尽管第二个向下仍然被忽略,但无论我尝试点击多快,第二个向上事件都会被捕获
调试输出(1=向下,-1=向上):
Button: 1 //slow clicks
Button: -1
Button: 1
Button: -1
Button: 1
Button: -1
Button: 1
Button: -1
Button: 1 //started clicking fast
Button: -1
Button: -1
Button: 1
Button: -1
Button: -1
Button: 1
Button: -1
Button: -1
Button: 1
因为我已经因为发布没有代码的问题而被否决了,这里有一些代码:
void Opencv_UI::event_process(int evt, int x, int y, int flags)
{
int button = 0;
switch(evt)
{
case CV_EVENT_LBUTTONDOWN : button=1; break;
case CV_EVENT_LBUTTONUP : button=-1; break;
case CV_EVENT_RBUTTONDOWN : button=3; break;
case CV_EVENT_RBUTTONUP : button=-3; break;
}
if(button==1||button==-1)
std::cout<<"Button: "<<button<<"n";
//Code below does not affect event performance, I tryed the script with all this commented out
int button_count = buttons.size();
for(int i=0; i<button_count; i++) //Informs buttons about mouse event
{
buttons[i]->mouse(x, y, button);
}
this->render(); //Renders buttons affected by click/mousemove
}
原来,当检测到双击时,发送了不同的事件,因此发送了CV_EVENT_LBUTTONDBLCLK
常量
开关应该是这样的:
switch(evt)
{
case CV_EVENT_LBUTTONDBLCLK : //Capture doubleclick too
case CV_EVENT_LBUTTONDOWN : button=1; break;
case CV_EVENT_LBUTTONUP : button=-1; break;
case CV_EVENT_RBUTTONDOWN : button=3; break;
case CV_EVENT_RBUTTONUP : button=-3; break;
}
相关文章:
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- 比较字符串的 GetLine 工作一次,然后比较之后不起作用
- C++如何使用lambda表达式来捕获上一次迭代的值
- (C++)for循环中的空初始语句是否保存所有编译器中变量的上一次初始化
- 我应该只在免费商店上为一次调用创建对象吗?
- GoogleMock:如何保存参数,以便在模拟上的下一次调用中使用
- 为什么我的破坏者只称呼一次,而不是在删除(a)调用上
- #pragma 一次位置:在 #include 之前或之后
- 在功能静态变量上调用Setter一次
- C++ 和 SDL 一次在屏幕上显示的图像不能超过 3 张
- 在 Eclipse 上,有没有办法一次修改多个包含路径
- 仅在 CUDA 上修改设备内存一次
- 如何在C++中的while循环中存储上一次迭代
- QSort 无法正确排序,除非之后再排序一次
- Qt - 解决一个插槽上的两个顺序调用,并且仅执行一次操作
- 重复上一次输入两次
- 如何在 Windows11(x7) 上使用 EPM 一次将 64 个浏览器帮助程序对象 dll 注册到 IE7 中
- 调用从上一次执行中保存的函数指针会失败吗
- Opencv未能捕获上一次之后的早期点击
- (WINSOCK) c++游戏服务器:TCPAccept上一次有太多TCP连接