首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV鼠标事件总是在鼠标滚动上接收事件10和*标志*0?

OpenCV鼠标事件总是在鼠标滚动上接收事件10和*标志*0?
EN

Stack Overflow用户
提问于 2019-02-09 10:45:18
回答 2查看 3.4K关注 0票数 2

问题是,在较早版本的Ubuntu16.04和OpenCV 3.4 getMouseWheelDelta(标志)总是等于零,无论滚动轮方向。

在Ubuntu18.04和OpenCV 4上的新机器上,这个函数工作得很好,getMouseWheelDelta(标志)返回-1或1,这取决于滚动方向:

代码语言:javascript
复制
#include "opencv2/core.hpp"
#include <iostream>
using namespace std;
using namespace cv;

void on_mouse(int event, int x, int y, int flag, void* userdata)
{
    printf("event = %d, %d\n", event, getMouseWheelDelta(flag));
    if (event==EVENT_MOUSEWHEEL)
    {
        if (getMouseWheelDelta(flags) > 0)
            zoom += 0.1f; // this newer gets executed on Ubuntu 16.04 and OpenCV 3.4
        else
            zoom -= 0.1f;
    }
}

int main()
{
    Mat mSrc = imread("xxxxx.jpg");
    imshow("src", mSrc); 
    setMouseCallback( "src", on_mouse, NULL );

    waitKey(0);

    return 0;
}

获取鼠标滚轮增量返回正和负值取决于滚动方向。

问题是,当我在旧的Ubuntu 16.04上尝试相同的代码时,在Open 3.4中,无论是向上滚动还是向下滚动,我都会收到事件10和0?我应该如何获得滚动轮的方向,因为我使用这个信息放大到照片?

在OpenCV文档中,它说:

代码语言:javascript
复制
getMouseWheelDelta()

Note:
Mouse-wheel events are currently supported only on Windows.

但是为什么它要在我的Ubuntu18.04机器上工作呢?我怎样才能实现它在Linux的旧版本上呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-09 14:05:28

我检查了其他事件,结果显示,ubuntu16.04和OpenCV 3.4中的滚动与较新的版本有所不同,是事件11而不是10,后者是水平鼠标滚动cv::EVENT_MOUSEHWHEEL。如果我检查这个值,当我向上滚动时,它会给出最大16位负值,如果我向下滚动,它会给出正值。这很奇怪,但至少现在我可以知道用户是否在用鼠标轮滚动。

cv::EVENT_MOUSEWHEEL = 10,//对新版本返回+-1

cv::EVENT_MOUSEHWHEEL = 11 // on旧版本返回+- max 16位值

票数 0
EN

Stack Overflow用户

发布于 2019-02-09 12:02:37

我刚刚遇到了一个类似的问题。在python中,getMouseWheelDelta()函数似乎不存在,但我找到了一种处理事件的方法。也许在c++中,一个类似的实现也适用于ubuntu。

代码语言:javascript
复制
def ProcessMouseEvent(event,x,y,flags, params):
    print(event)
    print(flags)
    # mousewheel event code is 10
    if event == 10:
            #sign of the flag shows direction of mousewheel
            if flags > 0:
                #scroll up
            else:
                #scroll down

Python版本3.7.1

OpenCV版本3.4.3

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54605443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档