C++ opencv:无法通过waitKey读取大写字母
在无限while循环中,我有一个简单的开关盒,如下所示,根据用户按下的键调用函数。我用OpenCV库编程C++。 下面使用的waitKey功能能够读取我在键盘上按下的小写字母。然而,我无法阅读任何大写字母,它仍然将其阅读并解释为相应的小写字母。 在此方面的任何帮助都将不胜感激。我应该更新我的opencv库吗?在post的帮助下,我在ubuntu上安装了opencv 操作系统UBUNTU 13.10 opencv版本2.4.8 伪码C++ opencv:无法通过waitKey读取大写字母,c++,opencv,ubuntu,C++,Opencv,Ubuntu,在无限while循环中,我有一个简单的开关盒,如下所示,根据用户按下的键调用函数。我用OpenCV库编程C++。 下面使用的waitKey功能能够读取我在键盘上按下的小写字母。然而,我无法阅读任何大写字母,它仍然将其阅读并解释为相应的小写字母。 在此方面的任何帮助都将不胜感激。我应该更新我的opencv库吗?在post的帮助下,我在ubuntu上安装了opencv 操作系统UBUNTU 13.10 opencv版本2.4.8 伪码 while(1) {` char k = waitKey
while(1)
{`
char k = waitKey(0);
switch(k) {
case 'a' : ... break;
case 'b' : ... break;
case 'A' : ... break; // UNABLE TO READ A here.
}
}
我在OpenCV论坛上发现了一个与您的问题相关的小提示,以防您还没有找到它:我也有同样的问题(与OpenCV-4.x有关)。 我认为这是因为我使用cmake选项
-D和_QT=ON编译了opencv(以启用图像上的缩放滚动)。但是Qt将q和q解释为相同的键码(81);唯一的问题是它添加了一个(shift)修改器
假设您在C++/Qt程序中收到一个QKeyEvent
事件。当按下时,您会得到:
- “Q”:event.key()=81,event.modifiers().testFlag(Qt::KeyboardModifier::ShiftModifier)=true
- “q”:event.key()=81,event.modifiers().testFlag(Qt::KeyboardModifier::ShiftModifier)=false
不幸的是,当opencv使用Qt时,似乎cv::waitKey
或cv::waitKeyEx
不读取修饰符,只读取键代码
到目前为止,我找到的唯一选择是使用-D和_QT=OFF重新编译
。然后我可以区分Q和Q(也可以区分左箭头和左移箭头等等)。但折衷的是,我不能再滚动图像了…很抱歉投了反对票,但请不要建议任何人使用不推荐的c-api。是的。请投你一票,并更正答案。谢谢你指出。我从未意识到这一点。只是为了将来,为寻求答案的人阅读:OpenCV wil drop C-API-感谢@Ankit和berak的努力:)我确实在他的答案中找到了Ankit指出的帖子,但我只是想确定一下,在我尝试自己编译源代码或类似的东西之前。我刚刚检查了API的索引,发现WaIKEY仍然是C++ API,我想在这方面没有太大的改变。还不知道为什么它不起作用。将重试。请注意:这可能与使用的图形库有关:我曾在2.4.3上使用Gtk,毫无疑问,waitKey()
确实起了作用。我刚刚切换到2.4.10并使用Qt支持构建它:突然我发现它并没有区分大小写!