c++ - OpenCV 鼠标事件总是在鼠标滚动时收到事件 10 和 *flag* 0?
问题描述
问题在于,在旧版本的 Ubuntu 16.04 和 OpenCV 3.4 上,无论滚轮方向如何,getMouseWheelDelta(flag) 始终为零。
在我在 Ubuntu 18.04 上且从未使用 OpenCV 4 的较新机器上,此功能可以完美运行,并且 getMouseWheelDelta(flag) 根据滚动方向返回 -1 或 1:
#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 CV 3.4 上,无论我向上还是向下滚动,我总是会收到事件 10 和 0?当我使用此信息放大照片时,我应该如何获得滚轮方向?
在 OpenCV 文档中它说:
getMouseWheelDelta()
Note:
Mouse-wheel events are currently supported only on Windows.
但是,为什么它可以在我的 Ubuntu 18.04 机器上运行,我如何为旧版本的 Linux 实现它?
解决方案
我刚刚遇到了类似的问题。在 python 中,getMouseWheelDelta() 函数似乎不存在,但我找到了一种处理事件的方法。也许类似的实现也适用于 ubuntu 的 c++。
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
推荐阅读
- kotlin - 如何区分显式 null 和省略参数
- c++ - 为什么这个代码位移 0 然后比较?
- javascript - 无用户身份验证 Foursquare API“缺少访问凭据”- 400 错误
- c# - Xamarin.Forms 长按效果 - 如何在代码后面设置命令(无 XAML)
- grails - Grails 3.3:找不到 com.novadge.plugins:grails-twilio:0.1.4
- .net - 在托管 C++ 上使用指向回调函数的非托管指针
- mysql - 如何比较mysql中2个表中的值
- coldfusion - CFMail 附件文件名在 Windows 服务器上的 ColdFusion 2016 中损坏
- ios - 日志文件(崩溃信息) - iOS 应用程序 (Swift)
- ios - iOS Firebase Crashlytics 缺少 dSYM