如何删除opencv上的鼠标滚轮默认缩放

时间:2018-04-03 14:21:32

标签: python-3.x opencv

我希望在OpenCV上使用鼠标滚轮向上和向下滚动时删除默认缩放行为。我设置了一个鼠标回调方法(在下面定义),以便覆盖此行为但没有成功:

import cv2

def mouse_callback(event, x, y, flags, param):
    global index

    if event == cv2.EVENT_MOUSEWHEEL :
        if flags > 0:
            index += 1
        elif flags < 0:
            index -= 1
        index %= length

cv2.namedWindow('window', cv2.WINDOW_NORMAL)
cv2.setMouseCallback('window', mouse_callback)
cv2.imshow('window', path)

有没有人成功删除了默认行为?

1 个答案:

答案 0 :(得分:1)

好吧,这似乎不太可能是简单的方法,因为opencv-python默认使用HighGui,它主要用于调试。

解决方案1 ​​

这就是我所做的并且它的工作原理。您需要自己重建opencv-python项目,并在文件window_QT.cpp中包含的opencv中进行一些更改。在那里,您可以找到函数DefaultViewPort::wheelEvent,您可以在其中删除scaleView函数调用。

解决方案2

您还需要重建opencv-python并选择GTK而不是QT ui。我从here得到了这个建议。

如何构建opencv-python?

如何构建opencv-python项目here。您主要需要git clone并运行python setup.py buildpython setup.py install。请注意,解决方案1和2仅适用于具有更改的opencv库的计算机(除非您查看packaging)。

解决方案3

您使用完全其他库来显示图片/框架,例如tkinterPyGame

解决方案4

这取决于您的使用案例,但python-evdev可以“Get exclusive access to a device”。意思是,只有您的应用程序可以从特定设备(如鼠标)接收事件。如果你深入挖掘,可能还有一个选项,只能自我抓住某​​些事件。