C++ opencv:无法通过waitKey读取大写字母

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循环中,我有一个简单的开关盒,如下所示,根据用户按下的键调用函数。我用OpenCV库编程C++。 下面使用的waitKey功能能够读取我在键盘上按下的小写字母。然而,我无法阅读任何大写字母,它仍然将其阅读并解释为相应的小写字母。 在此方面的任何帮助都将不胜感激。我应该更新我的opencv库吗?在post的帮助下,我在ubuntu上安装了opencv

操作系统UBUNTU 13.10 opencv版本2.4.8

伪码

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支持构建它:突然我发现它并没有区分大小写!