我希望在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)
有没有人成功删除了默认行为?
答案 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 build
和python setup.py install
。请注意,解决方案1和2仅适用于具有更改的opencv库的计算机(除非您查看packaging)。
解决方案3
您使用完全其他库来显示图片/框架,例如tkinter或PyGame。
解决方案4
这取决于您的使用案例,但python-evdev可以“Get exclusive access to a device”。意思是,只有您的应用程序可以从特定设备(如鼠标)接收事件。如果你深入挖掘,可能还有一个选项,只能自我抓住某些事件。